Найти тему
HowToSchool

SD-EP7: Как избежать двойной оплаты?

Одной из самых серьезных проблем, с которой может столкнуться платежная система, является двойное списание средств с клиента.

Иногда нам нужно повторить платежную транзакцию из-за сетевых ошибок или тайм-аута. Например, клиент пытается совершить покупку на 15 долларов, но платеж не проходит из-за плохого сетевого подключения. В надежде на то, что состояние сети улучшиться, клиент повторяет запрос, и этот платеж успешно завершается с четвертой попытки. Так происходит благодаря идемпотентным запросам.

С точки зрения API, идемпотентность означает, что клиенты могут повторно выполнять один и тот же вызов и получать одинаковый результат.

Ключ идемпотентности обычно представляет собой уникальное значение, которое генерируется клиентами с ограниченным сроком действия. UUID обычно используется в качестве ключа идемпотентности и рекомендуется многими технологическими компаниями, такими как Stripe и PayPal. Для выполнения идемпотентного платежного запроса в заголовок HTTP добавляется ключ идемпотентности: <idempotency-key: key_value>.