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