Платёжный контур ломается не на happy path. Он ломается на повторном вебхуке, на задержке, на кривом IP и на расхождении статусов между ЮKassa и вашей БД.
Кейс был простой и злой:
1) платёж создают с `capture=False`
2) входящий webhook режут по IP
3) каждое событие сначала падает в event log
4) дальше — в обработчик
5) capture подтверждают только стабильным idempotency key
6) success принимают только после проверки суммы, валюты и `metadata`
7) если что-то разъехалось — есть ручной `confirm`, который дочитывает фактический статус из ЮKassa и синхронизирует локальную базу
Это не «перестраховка». Это базовая гигиена. Без журнала событий вы не расследуете инцидент. Без idempotency вы словите двойной capture. Без IP-check вы сами открываете дверь мусору. Без аварийного пути у вас не платёжка, а вера в лучшее 🙃
Вывод простой: webhook — не истина. Истина — это верифицированный поток событий + проверка статуса из источника + механизм восстановления. Всё остальное — халтура, которая красиво работает ровно до первого сбоя.
A/B Test Room
@ABTestRoomPro
Платёжный контур ломается не на happy path. Он ломается на повторном вебхуке, на задержке, на кривом IP и на р
Этот пост опубликован в Telegram-канале A/B Test Room. Подписаться можно по ссылке: @ABTestRoomPro.