2017-12-04 3 views
1

Ich verwende Stripe, damit mein Kunde eine Kreditkarte speichern und Rechnungen bezahlen kann (die eine eindeutige ID haben). Bei der Bezahlung verwende ich ein Formular, um eine POST-Anfrage mit der Karten-ID (bereitgestellt von stripe) an meinen Server zu senden, und der Controller berechnet diese. Dann markierte ich die Rechnung, die auf meiner Seite bezahlt wurde.Wie kann ich die doppelte Belastung mit Stripe verhindern?

Stellt sich heraus, dass, wenn ich den Absendungsschaltfläche meines Formulars schnell genug doppelklicke, ich zwei POST-Anforderung senden und die Karten zweimal aufgeladen werden, da, wenn die zweite POST-Anforderung auf meinem Server ankommt, die POST-Anforderung von meinem Server an Stripe API (vom ersten Klick an) ist noch nicht beendet, daher wurde die Rechnung noch nicht als bezahlt markiert.

Ich überlege, die Schaltfläche zum Senden von Formularen nach dem ersten Klick zu deaktivieren, aber ich denke, dass es einen saubereren Weg geben kann.

Gibt es auf der Seite von Stripe doppelte Gebühren (vielleicht mit meiner Rechnungs-ID)? Wenn nicht, was wäre die beste Back-End-Methode, um dies auf meiner Seite zu tun?

+1

Geben Sie eine eindeutige Transaktions-ID in ein verstecktes Feld im Formular ein (es muss nur ein Hash der Benutzer-ID und des Zeitstempels sein) und der Server speichert die Transaktions-IDs, die an Stripe und gesendet wurden sich weigern, eine doppelte Einreichung zu senden. –

Antwort

1

Das Deaktivieren der Formularübermittlung nach dem ersten Klick ist definitiv der einfachste Weg, dies zu implementieren.

Ein anderer Ansatz besteht darin, idempotente Anfragen wie dokumentiert here zu verwenden. Die Idee ist, dass Sie eine eindeutige Kennung übergeben, wenn Sie eine Anfrage an die API von Stripe stellen, die sicherstellt, dass Sie diese Transaktion nur einmal ausführen können. Wenn Sie die Abfrage mit dem gleichen Idempotenzschlüssel erneut ausführen, erhalten Sie die ursprüngliche Antwort vom ersten Anruf, die sicherstellt, dass Sie nie 2 Gebühren für die gleiche "Transaktion" auf Ihrer Website erstellt haben.

0

ja idempotente Anfrage ist der richtige Weg, dies zu implementieren.

können Sie dies hier finden

https://stripe.com/docs/api#idempotent_requests

eine weitere einfache Lösung, die Sie implementieren können, um die Verfolgung der Streifen api Aufruf Verwendung von Zustandsmaschine ist.

Verwandte Themen