Чаще всего проблема не в банке, а в слабой логике подтверждения платежа. Если пользователь жмет «повторить», не дождавшись ответа, или шлюз не умеет распознавать дубль по order_id, деньги могут уйти дважды. На стороне мерчанта это выглядит как две успешные операции, хотя инициатор был один.
Что помогает:
— делай один уникальный ID на каждую попытку пополнения и не меняй его при ретрае;
— блокируй кнопку оплаты после первого клика до получения статуса;
— проверяй, вернулся ли callback, прежде чем запускать новый запрос;
— сверяй сумму, валюту и получателя: дубль часто маскируется под «новую» оплату.
Отдельно стоит проверить таймауты. Если клиент не дождался ответа и повторил платёж, а система не умеет отличать поздний success от нового запроса, риск дубля резко растет. В логах это видно как два почти одинаковых пакета с разницей в секунды.
Самый надежный сценарий — idempotency на стороне API и понятный экран статуса для пользователя: «платеж в обработке», «успешно», «не подтвержден». Тогда у клиента меньше поводов нажимать лишний раз, а у вас — меньше ручных возвратов.
Платежные методы 💳
@paymentbk_ru
Двойное списание при пополнении счета: где ломается процесс и как это поймать
Этот пост опубликован в Telegram-канале Платежные методы 💳. Подписаться можно по ссылке: @paymentbk_ru.