Middle+
8
Как обеспечить идемпотентность на случай, когда внешний банк глючит? Как предусмотреть компенсационную операцию для разморозки захолдированных средств?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Для обеспечения идемпотентности при взаимодействии с внешним банком, который может глючить, можно использовать следующие подходы:
-
Уникальные идентификаторы транзакций: каждый запрос к банку сопровождается уникальным ID. Если запрос повторяется из-за сбоя, банк распознаёт дубликат и не проводит операцию повторно.
-
Статусные проверки: перед повторной отправкой операции проверять статус предыдущей (например, через API банка), чтобы не создавать повторных списаний.
-
Компенсационные операции для разморозки средств:
- Если средства были захолдированы (заморожены), но операция не завершилась успешно, нужно предусмотреть отдельный процесс отмены или разморозки.
- Это может быть отдельный API вызов "отмены" или "разморозки".
- Важно, чтобы компенсационная операция была тоже идемпотентной и могла быть вызвана несколько раз без негативных последствий.
Пример схемы:
- Отправляем запрос на заморозку средств с уникальным transactionId.
- Если банк не отвечает или отвечает с ошибкой, повторяем запрос с тем же transactionId.
- Если операция не подтверждена, вызываем компенсационную операцию с тем же transactionId для разморозки.
Такой подход позволяет избежать двойных списаний и гарантирует корректное состояние средств даже при сбоях.