Повторный webhook почти всегда означает, что ваш сервер не подтвердил получение достаточно быстро в первый раз, и отправитель решил, что запрос не дошёл.
Решение — идемпотентный ключ на уровне сделки
Проверяйте по ID события из вебхука, не создана ли уже сделка по этому событию, прежде чем создавать новую. Храните обработанные ID в базе с уникальным индексом — попытка вставить дубль вызовет ошибку, которую легко перехватить как «уже обработано».
Отвечайте быстрее
Подтверждайте получение (200 OK) сразу, до тяжёлой обработки — если обработка занимает секунды, а не миллисекунды, вынесите её в очередь, чтобы не провоцировать повторную отправку из-за таймаута на стороне источника.



