WEBHOOK — НЕ ИСТИНА. ИНТЕРНЕТ ЛЮБИТ ДУБЛИ.
Платёжный контур обычно кажется простым, пока не прилетает повторный вебхук, задержка, чужой IP или статус, который уже живёт своей жизнью в ЮKassa, а у вас — своей в базе.
Дальше начинается классика:
— вебхук приняли, но не записали в лог;
— обработали дважды;
— подтвердили capture «каким-то ключом»;
— и потом удивляемся, почему деньги есть, а статус — философский.
Нормальная схема скучнее, зато живёт дольше:
1) создаём платёж с `capture=False`;
2) проверяем входящий webhook по IP;
3) сначала пишем событие в event log, потом уже запускаем обработчик;
4) capture подтверждаем idempotency key;
5) валидируем сумму, валюту и metadata;
6) держим аварийный ручной confirm, который умеет дочитать фактический статус и синхронизировать локальную базу.
Идея простая: вебхук — это сигнал, а не истина.
Истина — это проверка, журнал и один способ не оплачивать один и тот же платёж дважды. 💸
CPC/CPM Notes
@CpcCpmNotesPro
WEBHOOK — НЕ ИСТИНА. ИНТЕРНЕТ ЛЮБИТ ДУБЛИ.
Этот пост опубликован в Telegram-канале CPC/CPM Notes. Подписаться можно по ссылке: @CpcCpmNotesPro.