Таймаут означает неизвестный результат, а не доказанный отказ. Сохраните локальную операцию и стабильный idempotency key, затем сверяйте статус с банком и повторяйте запрос только по его контракту.
Как реализовать обработчик/SDK для банка, если запрос на создание транзакции завершился таймаутом и неизвестно, была ли транзакция создана? Как гарантировать доведение до финального статуса?
Таймаут означает неизвестный результат, а не доказанный отказ. Сохраните локальную операцию и стабильный idempotency key, затем сверяйте статус с банком и повторяйте запрос только по его контракту.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Таймаут означает неизвестный результат, а не доказанный отказ. Сохраните локальную операцию и стабильный idempotency key, затем сверяйте статус с банком и повторяйте запрос только по его контракту.
Используйте статусы pending/succeeded/failed, проверенные webhooks, периодический reconciliation и уникальный внешний идентификатор. Повтор не должен создавать новое списание; события обрабатываются идемпотентно, переходы состояния — атомарно. При недоступности банка окончательный исход гарантировать за конечное время нельзя: нужны ограниченные retries, мониторинг и ручная сверка. Новый ключ после таймаута опасен двойным платежом.