Вебхук пришёл дважды: почему SELECT перед INSERT не спасает от повторного начисления
Обработчик увеличил баланс, но ответ потерялся. Отправитель повторил вебхук — и баланс вырос ещё раз. Разбираем защиту на Python и SQLite: уникальный ключ, общая транзакция и воспроизводимые тесты повторной и параллельной доставки. Заодно проверим падение посередине обработки и одинаковый ключ с разным содержимым. Читать далее
