Sobes.tech
Senior

Cum să faci trimiterea facturii către un sistem extern mai fiabilă? Pentru ca, în cazul în care serviciul de plată nu este disponibil, clientul să poată totuși să rezerve un loc și să plătească mai târziu (în decurs de 10 minute).

sobes.tech AI

Răspuns de la AI

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

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

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

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

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

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

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

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

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