Платёжный контур чаще всего ломается не в API, а в уверенности команды, что «всё уже учтено».
Пока webhook приходит один раз, вовремя и с правильным статусом, система выглядит надёжной. Но первый сбой быстро расставляет роли:
— дубль события показывает слабый idempotency;
— задержка вебхука вскрывает ложную синхронизацию;
— чужой IP превращает интеграцию в дыру;
— расхождение локальной базы и ЮKassa делает отчётность фикцией.
Поэтому зрелая схема — это не «приняли оплату и обновили статус», а цепочка с защитой на каждом шаге:
| Узел | Что защищает |
|---|---|
| IP-check | от мусорных и поддельных запросов |
| event log | от потери истории и спорных статусов |
| idempotency key | от повторного capture |
| валидация суммы/валюты/metadata | от ошибок данных |
| аварийный confirm | от ручного тупика |
Главный вывод простой: платежи нельзя доверять «на глаз». Контур должен не только принимать webhook, но и уметь пережить сбой, догнать расхождение и вернуть систему к реальному статусу. Иначе выигрывает не продукт, а случай. ⚠️
Performance Memo
@PerformanceMemoPro
Платёжный контур чаще всего ломается не в API, а в уверенности команды, что «всё уже учтено».
Этот пост опубликован в Telegram-канале Performance Memo. Подписаться можно по ссылке: @PerformanceMemoPro.