Оформление заказа с оплатой
Вопрос
Спроектируй чекаут: корзина, адрес, оплата. Деньги настоящие.
Веди разговор вслух, как на секции. Начинать с решения - главная ошибка: первые полторы минуты только вопросы.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
уточнил способы оплаты, доставку, требуется ли фискализация
многошаговая форма: где живёт черновик и переживает ли он перезагрузку
валидация на клиенте - удобство, источник правды всегда сервер
цена пересчитывается на сервере: клиенту нельзя доверять сумму
идемпотентность оплаты: повторная отправка не создаёт второй заказ
редирект на платёжную страницу и возврат: что если пользователь закрыл вкладку
вебхук - источник правды о статусе, а не возврат пользователя
блокировка кнопки и понятная ошибка при отказе
Что могут спросить следом
- Что если вебхук не пришёл, а пользователь вернулся с успехом?
- Как показать, что оплата в обработке?
- Где хранить черновик многошаговой формы?
Разбор
Здесь проверяют не форму, а понимание, что деньги настоящие.
Главные две вещи. Первая: сумма считается на сервере. Клиент показывает, но не решает - иначе скидку подставят из консоли. Вторая: идемпотентность. Пользователь дважды нажал «оплатить», сеть подвисла, он обновил страницу - второго заказа быть не должно. Ключ идемпотентности генерируется один раз на попытку оформления.
Возврат с платёжной страницы ненадёжен: пользователь может закрыть вкладку после успешной оплаты. Поэтому источник правды - вебхук от платёжной системы, а экран «спасибо» лишь отображает состояние, опрашивая заказ.
Типичная авария: каскадное удаление сносит запись о платеже, система считает подписку неоплаченной, и клиент платит второй раз. Вывод, который стоит произнести: финансовые записи не удаляются никогда, состояние платежа - конечный автомат.
Черновик формы переживает перезагрузку, шаги отражаются в адресе, кнопка блокируется на время запроса.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.