Вы вообще со мной разговариваете? Ответы сервиса видите? - Нет!!! Сервис НЕ будет генерить ключ. Вообще. Никак. Точка! Он будет возвращать "invalid_request". Очнитесь.
На этом все. Дальше можно только ходить по кругу.
спасибо, но это именно то, что я вам скидывал и хотел, чтобы вы прочитали. Вы молодец, справились.Буду спать спокойно.
Т.е. через оф. клиента платеж будет создан в любом случае, это видно в исходниках и я провел тесты.Да при каждой попытке оплаты они будут генерить ключ. Имподентности нет и хрен с ней. Можете считать что Idempotence-Key это у вас какой то Invoice Id. Никакая имподентность вам нахрен не нужна. Каждый раз тупо генерите ключ.
Туннель, лифт, подземный переход.. что угодно в связке со слабой мобильной связью.
Стоят верблюд-сын и верблюд-отец. Сын спрашивает:
— Папа, а зачем нам на спине нужен горб?
— В горбу, сынок мы накапливаем воду. Когда мы идём по пустыне, нас не мучает жажда.
— Папа, а зачем нам такие копыта?
— Это чтобы в пустыне ноги не проваливались в песок.
— А зачем нам такие большие и жёсткие губы?
— Это чтобы в пустыне можно было есть колючки.
— Тогда, папа, объясни мне, на кой чёрт нам весь этот тюнинг в Саратовском зоопарке?..
Вы, возможно, скажете, мол как же так
Расскажите потом, удалось убедить разрабов сервиса, что ключ не нужен, лишний и вот эту историю с собакой. Тут всем будет полезно.
Если вы повторяете запрос с теми же данными и тем же ключом, API обрабатывает его как повторный. Если данные в запросе те же, а ключ идемпотентности отличается, запрос выполняется как новый.
if ($idempotenceKey) {
$headers[self::IDEMPOTENCY_KEY_HEADER] = $idempotenceKey;
} else {
$headers[self::IDEMPOTENCY_KEY_HEADER] = UUID::v4();
}
А зачем отправлять повторно с тем же ключом?
Вы спросили как ее реализовать - вам задали вопрос - нахрена.
И в 3 раз вам говорят, в вашей статье вызов АПИ блочит ресурсы, меняет состояние обьектов, вне зависимости от того успешный он или нет. Там нужна идемпотентность потому что 100 запросов утерянных по пути - приведет к тому что все ресурсы будут заблокированы, и даже сам клиент не сможет ими воспользоваться - не говоря о других клиентах. В вашем случае запрос ничего не заблокирует, если он не успешен, вы можете отправить миллион не успешных запросов - это никак не изменит состояние ресурсов, обьектов, ровно до того момента как запрос не станет успешным, как он только станет успешным вам прилетит постбэк абсолютно не связанный с плохим интернетом клиента. То есть в статье описана одна ситуация, в вашей конкретно ситуации совершенно другая. Не я понимаю что слово идемпотентность красивое звонкое, но в айти любой подход, любой инструмент, любой паттерн/антипаттерн имеет свою область применения. И вашем случае разница между этим двумя вариантами ровно одна - второй вариант потребует чуть больше кода. Все, точка - области применения нет. Выгод вы с этого не получите, только нарушение принципа KISS - Keep It Simple, Stupid - не надо тащить функционал поверх необходимого. Этот вывод можно было сделать по первому моему вопросу, если бы вы взяли на себя труд задуматься.
По этому вы не ответили. вопрос звучал как "В чем КОНКРЕТНО в вашей ситуации". Я даже выделили заглавными буквами. Окей давайте подчеркну еще раз:
Зачем яндексу - видно из статьи. Блокировка ресурсов. Более того я и раньше знал зачем нужна идемпотентность. Но мы говорим о вашем конкретном случае - обращении к АПИ платежного шлюза ЮКассы. В вашем конкретном случае - выгода в чем?
З.Ы. Слушайте если не секрет - сколько вам лет? Обьясняю контекст вопроса - у меня мама заслуженный учитель, высшая категория, все регалии, все дела. Слава богу давно уже на пенсии, но тем не менее - у нас есть с ней давний спор, она говорит что нынешняя молодежь имеет "клиповое мышление", оно не в состоянии строить цепочки. Я всегда отвечал что мол каждое прежнее поколение ныло что молодежь глупеет. Но вот я встретил вас, человека который умудрился заблудиться в 3 фактах, и мне тупо интересно - я уже проиграл или нет?