Выбор ответа Senior Мобильный system design обновлено
Оплата в мобильном приложении при плохой сети
Вопрос
Пользователь нажал «Оплатить», запрос ушёл, ответ не пришёл. Что должен сделать клиент?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Повторить с тем же ключом идемпотентности или запросить статус, показав «проверяем оплату». В платежах «неизвестно» это отдельное состояние.
Варианты ответа
- Показать ошибку и попросить нажать «Оплатить» ещё раз: повторный запрос безопасен, банк отклонит дубль
- Создать новый платёж с новым id, а старый отменить запросом, когда соединение восстановится
- Повторить с тем же ключом идемпотентности или запросить статус, показав «проверяем оплату»правильный ответ
- Считать оплату успешной и показать чек: при ошибке сервер сам вернёт деньги на карту
Разбор
В платежах «неизвестно» это отдельное состояние. Клиент создаёт идентификатор попытки оплаты заранее, повторы идут с ним, а сервер не спишет деньги дважды. Затем клиент опрашивает статус или ждёт push. Кнопка «Оплатить ещё раз» без идемпотентности приводит к двойному списанию, а оптимистичный успех к выдаче товара без денег.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Мобильный system design»
- Мобильный system design: SDK аналитики событий
- Мобильный system design: перевод денег в банковском приложении
- Мобильный system design: каталог и корзина маркетплейса
- Мобильный system design: лента новостей с картинками и видео
- Мобильный system design: загрузка фото и видео
- Мобильный system design: мессенджер
- Мобильный system design: заметки с синхронизацией между устройствами
- Мобильный system design: истории (stories)