Sobes.tech
Middle+
9

Как обеспечить идемпотентность на случай, когда внешний банк глючит? Как предусмотреть компенсационную операцию для разморозки захолдированных средств?

Companies where asked
СБЕРСБЕР

Answer from AI

sobes.tech AI

Для обеспечения идемпотентности при взаимодействии с внешним банком, который может глючить, можно использовать следующие подходы:

  • Уникальные идентификаторы транзакций: каждый запрос к банку сопровождается уникальным ID. Если запрос повторяется из-за сбоя, банк распознаёт дубликат и не проводит операцию повторно.

  • Статусные проверки: перед повторной отправкой операции проверять статус предыдущей (например, через API банка), чтобы не создавать повторных списаний.

  • Компенсационные операции для разморозки средств:

    • Если средства были захолдированы (заморожены), но операция не завершилась успешно, нужно предусмотреть отдельный процесс отмены или разморозки.
    • Это может быть отдельный API вызов "отмены" или "разморозки".
    • Важно, чтобы компенсационная операция была тоже идемпотентной и могла быть вызвана несколько раз без негативных последствий.

Пример схемы:

  1. Отправляем запрос на заморозку средств с уникальным transactionId.
  2. Если банк не отвечает или отвечает с ошибкой, повторяем запрос с тем же transactionId.
  3. Если операция не подтверждена, вызываем компенсационную операцию с тем же transactionId для разморозки.

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