Sobes.tech
Назад к вопросам
Senior
3

Как сделать отправку invoice во внешнюю систему более надёжной? Чтобы при недоступности платёжного сервиса клиент всё равно мог забронировать место и оплатить позже (в течение 10 минут).

Компании, где спрашивали
ТБанк

Ответ от нейросети

sobes.tech AI

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

  1. Асинхронная очередь сообщений. Вместо прямой синхронной отправки invoice в платёжный сервис, сохраняйте информацию о бронировании и invoice в локальной базе данных и помещайте задачу отправки в очередь (например, с помощью RabbitMQ, Kafka или встроенных очередей).

  2. Повторные попытки отправки. Фоновый процесс (worker) будет пытаться отправить invoice во внешнюю систему с повторными попытками и экспоненциальной задержкой, пока не получит подтверждение успешной обработки или не истечёт таймаут (10 минут).

  3. Локальное бронирование. Клиенту сразу подтверждается бронирование места, даже если платёжный сервис временно недоступен.

  4. Отмена или подтверждение бронирования. Если за 10 минут invoice не удалось отправить и оплатить, бронирование автоматически отменяется или переводится в статус ожидания.

  5. Идempotентность. Важно, чтобы отправка invoice была идемпотентной — повторные запросы не создавали дубликаты.

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

  • Клиент делает запрос на бронирование.
  • Сервер сохраняет бронирование и ставит задачу в очередь.
  • Worker пытается отправить invoice.
  • При успехе обновляет статус бронирования.
  • При неудаче повторяет попытки в течение 10 минут.
  • Если не удалось, уведомляет клиента или отменяет бронирование.

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