Повтор запроса на оплату списывает деньги дважды
Мобильный клиент отправляет POST /payments. При сетевом таймауте он повторяет запрос. Иногда первый запрос всё-таки доходит и обрабатывается — клиент получает второе списание. Какое решение устраняет причину, а не симптом?
- Перед вставкой платежа делать `SELECT` по параметрам и создавать запись, только если похожего платежа нет
- Убрать повторы на клиенте и показывать ошибку сети — пусть пользователь сам решает, нажимать ли кнопку ещё раз
- Клиент передаёт ключ идемпотентности; сервер хранит его с уникальным ограничением в БД и на повторе возвращает результат первой операции
- Увеличить таймаут клиента до нескольких минут, чтобы повторов на сетевых сбоях практически не возникало
