Sobes.tech
Middle+
18

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

Сұралған компаниялар
СБЕРСБЕР

AI-дан жауап

sobes.tech AI

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

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

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

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

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

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

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

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