Платёжный контур без защит почти всегда врет.
На бумаге всё просто: создали оплату, дождались webhook, обновили статус. В реальности ломается на банальном:
— webhook пришёл повторно;
— пришёл с задержкой;
— прилетел не оттуда;
— локальная база и ЮKassa уже живут в разных статусах.
Если не проверять входящий callback по IP, не писать каждое событие в event log и не разделять «принять событие» и «обновить деньги», вы получаете не автоматизацию, а источник ошибок в cashflow.
Нормальная схема выглядит сухо:
1. Платёж создаётся с `capture=False`.
2. Входящий webhook валидируется.
3. Событие сначала пишется в журнал, потом уходит в обработчик.
4. Capture подтверждается через стабильный idempotency key.
5. Успешный платёж сверяется по сумме, валюте и metadata.
6. Если контур разъехался — есть ручной confirm, который дочитывает фактический статус и синхронизирует базу.
Это не про «надёжный код». Это про то, чтобы не терять деньги на разъезде статусов и не считать прибыль по данным, которым нельзя верить.
Spend & Profit
@SpendProfitPro
Платёжный контур без защит почти всегда врет.
Этот пост опубликован в Telegram-канале Spend & Profit. Подписаться можно по ссылке: @SpendProfitPro.