Вступить в клуб →
средняявопросСеть и хранение данных

Двойные списания после автоматических повторов POST-запроса на оплату

В сетевом слое настроены повторы: при таймауте запрос отправляется заново, до трёх попыток. Таймаут — 10 секунд.

После релиза поддержка получает жалобы: у части пользователей списалось дважды за один заказ. В логах бэкенда видно два платежа, созданные с разницей в 10 секунд.

Что здесь неверно?

  • Ошибка на бэкенде: клиент повторяет запрос корректно, менять на мобильной стороне нечего
  • Достаточно увеличить таймаут до 60 секунд — повторов не будет, а значит не будет и дублей: причина проблемы именно в слишком коротком таймауте
  • Таймаут не означает, что сервер не обработал запрос: повтор неидемпотентной операции нужно делать с ключом идемпотентности либо сначала проверять статус операции
  • Повторять нельзя только ответы 5xx, а при таймауте повтор безопасен всегда: раз ответа нет, значит запрос до сервера не дошёл и платёж создан не был

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела