Дедупликация событий и заказов
Надёжное принятие и однократная выдача.
Повторы и ручная доставка могут повторить корректное событие. X-Event-Id — логическая идентичность события, X-Delivery-Id относится к доставке на endpoint. Дедуплицируйте событие и бизнес-заказ. Номера попытки или delivery ID недостаточно.
После проверки исходной подписи и авторизованного PAID-ответа со сверкой заказа/проекта/режима/валюты/цены выполните одну транзакцию БД: вставьте уникальный (merchant_scope, eventId), отметьте связанный заказ оплаченным под уникальным ограничением заказа/сессии и добавьте выдачу в надёжный outbox. Принятое событие или оплаченный заказ не создают повторную выдачу. Сначала commit, затем небольшой 2xx. Временный сбой чтения/хранения должен допускать повтор.
Нельзя выдавать заказ за сессию и повторно за дочерний счёт. Test-события, treasury-пополнения, тесты связи, redirects и записи проверки не оплачивают Live-заказ.