https://www.figma.com/board/FhILOSatj9iaYWcWxvYlQE/Ключ-идемпотентности--дешборд?node-id=0-1&p=f&t=eojFktjvmQL8naxc-0

Ключ идемпотентности служит защитой от дублированных выплат.

Если выплата создана на стороне провайдера - но ответа от ручки создания выплаты мы так и не получили по каким-либо причинам, то для нашей системы выплата не создана.

Ключ идемпотентности гарантирует, что несколько выплат с одним и тем же ключом не могут существовать, поэтому если мы попытаемся создать выплату с тем же самым ключом ещё раз - то получим ошибку, что такая выплата уже есть.

Если мы с помощью ключа идемпотентности убедились, что выплата есть, но она зафейлена - то для создания новой выплаты нам потребуется создать и новый ключ идемпотентности.

Часто в ручках провайдера отсутствует переменная Idempotency_key, и на её замену выступает order_id.

Краткий флоу:

  1. Создаём ключ идемпотетности
  2. С этим ключом пытаемся создать выплату
  3. В первый раз нам прилетаем ответ 408(Request Timeout), но при этом на стороне провайдера выплата создана.
  4. Т.к. на нашей стороне мы получили 408 и никакой информации о выплате, мы пытаемся её создать ещё раз
  5. Сервер отдаёт ошибку, либо же информацию о выплате, созданной ранее. Самое главное - второй выплаты не было создано.
  6. Profit.