Почему в стандарте v2 нет идемпотентности и чем это грозит
Повторный запрос — это второй оплаченный заказ. В стандарте нет ничего, что бы это остановило.
SMM Panel API v2 — это форма с полями key, action, service, link и quantity. Ни заголовка идемпотентности, ни идентификатора операции в нём не предусмотрено.
Значит, если ответ не дошёл — а он не дошёл, потому что оборвалась сеть, — у вас нет способа узнать, создался заказ или нет. Повторить запрос означает рискнуть вторым списанием.
Как это выглядит на практике
Таймаут на стороне клиента, ретрай по правилу «повторить трижды», и три одинаковых заказа у поставщика. Деньги списаны трижды, клиент получил втрое больше, чем просил, и вы объясняете это в поддержке.
Именно поэтому ретрая перевода денег не существует как понятия: повторный add — это не повтор запроса, это второй оплаченный заказ.
Что делаем мы
Принимаем заголовок Idempotency-Key на всех операциях, которые двигают деньги. Повтор с тем же ключом возвращает тот же заказ, а не заводит второй.
Остальная часть протокола совместима со стандартом: если вы уже работаете с любой панелью, у вас меняются ключ и адрес.