Sobes.tech
Senior
53

Jak zpřesnit odesílání faktury do externího systému tak, aby bylo spolehlivější? Aby zákazník i při nedostupnosti platební služby mohl rezervovat místo a zaplatit později (do 10 minut).

Společnosti byly požádány
ТБанк

Odpověď od AI

sobes.tech AI

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

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

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

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

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

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

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

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

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