Проверяет понимание рисков и обязательных мер при интеграции с внешним банковским HTTP API перед выпуском в продакшн.
Перевод денег через внешний банк по HTTP — это распределённая транзакция между вашей системой и чужой, где вы не контролируете ни сеть, ни доступность, ни поведение партнёра. Прежде чем включать это в прод, нужно закрыть несколько классов рисков: двойное списание, потерянные деньги, зависшие транзакции и утечка данных.
Сеть ненадёжна: запрос мог дойти до банка, а ответ потеряться. Если вы повторите запрос, деньги могут уйти дважды. Решение — передавать уникальный idempotency key (например, UUID транзакции) в заголовке, а банк должен возвращать тот же результат при повторе.
POST /payments HTTP/1.1
Idempotency-Key: 7f3c1e2a-...-9b
Content-Type: application/json
{ "amount": 1000, "currency": "RUB", "to": "..." }Нельзя считать перевод успешным только по HTTP 200. Нужен отдельный процесс reconciliation: периодически запрашивать статус транзакций по их id и сверять с внутренним состоянием. Все переходы статусов (pending, sent, confirmed, failed) должны быть явными и логироваться.
Итог: перед прод-релизом обязательно обеспечьте идемпотентность, корректные таймауты и ретраи, сверку статусов с банком и защиту канала. Без этих мер любой сетевой сбой превращается в финансовый инцидент.