Платёжные системы часто повторяют callback-уведомление об оплате, если не получили быстрое подтверждение от вашего сервера — без защиты от повтора это создаёт второй заказ на ту же оплату.
Используйте ID транзакции как идемпотентный ключ
Каждая оплата имеет уникальный ID транзакции от платёжной системы. Перед созданием заказа проверяйте, не был ли этот ID уже обработан — если был, просто подтвердите получение повторного callback без повторного создания заказа.
Отвечайте платёжной системе быстро
Обработку заказа (отправку писем, обновление склада) стоит выносить в отдельный процесс после быстрого подтверждения получения callback — если платёжная система не получает ответ вовремя, повтор callback практически гарантирован по её собственной логике.



