Hören Sie auf, Zahlungen zu erstatten, die Sie niemals hätten abbuchen sollen
Viele Entwickler implementieren einen Checkout-Flow, der die Karte sofort belastet. Danach führen sie eine Bestellvalidierung durch, wie zum Beispiel Lagerbestandsprüfungen oder Betrugsprüfungen.
Schlägt die Validierung fehl, veranlasst der Code eine Rückerstattung.
Dies verursacht Probleme für Ihre Kunden. Sie sehen eine Abbuchung und erst Tage später eine Rückerstattung. Sie denken, Ihr Unternehmen sei unzuverlässig. Sie glauben, ihr Geld sei blockiert.
Rückerstattungen verursachen echte Kosten:
- Kunden verlieren das Vertrauen, wenn sie zwei separate Transaktionen sehen.
- Es dauert 5 bis 10 Tage, bis Rückerstattungen auf einem Kontoauszug erscheinen.
- Sie können Geld durch Transaktionsgebühren oder Wechselkurse verlieren.
- Kreditkartennetzwerke markieren häufige Muster von Abbuchung und Rückerstattung als hochriskant.
Die Lösung besteht darin, das Authorize-and-Capture-Modell zu verwenden.
Die meisten Tutorials lehren Sie, Geld sofort einzuziehen (capture). Stattdessen sollten Sie die Gelder zuerst reservieren (hold). Eine Reservierung wird auf der Karte hinterlegt, ohne dass das Geld tatsächlich bewegt wird. Wenn Ihre Validierung fehlschlägt, stornieren Sie die Reservierung einfach. Es erfolgt keine Abbuchung auf dem Kontoauszug des Kunden.
In Stripe erreichen Sie dies, indem Sie capture_method auf manual setzen.
Der neue Ablauf funktioniert so:
- Erstellen Sie einen
PaymentIntentmit manueller Einziehung (manual capture). - Die Gelder werden autorisiert, aber nicht bewegt.
- Führen Sie Ihre Bestellvalidierung durch.
- Wenn die Bestellung gültig ist, ziehen Sie die Zahlung ein (
capture). - Wenn die Bestellung fehlschlägt, stornieren Sie den
Intent.
Dieser Ansatz bietet mehrere Vorteile:
- Sie vermeiden die Notwendigkeit von Rückerstattungen.
- Eine stornierte Autorisierung verschwindet einfach vom Kontoauszug des Kunden.
- Sie können Teil-Einziehungen (
partial captures) durchführen. Wenn ein Kunde drei Artikel kauft, aber einer nicht vorrätig ist, ziehen Sie nur den Betrag für die zwei Artikel ein. - Sie erstellen einen sauberen Prüfpfad (
audit trail) in Ihren Protokollen.
Die meisten großen Zahlungsanbieter verwenden dieselbe Logik.
- Stripe verwendet
capture_method: manual. - Adyen verwendet manuelle Einziehungsverzögerungen (
manual capture delays). - Braintree verwendet
submitForSettlement: false. - PayPal verwendet
intent: AUTHORIZE.
Verwenden Sie diese Methode, wenn ein Teil Ihrer Geschäftslogik fehlschlagen kann, nachdem der Kunde auf „Bezahlen“ geklickt hat. Verschieben Sie Ihre riskanten Prüfungen zwischen die Autorisierung und die Einziehung. So bleiben Ihre Geldtransaktionen sauber und Ihre Kunden zufrieden.
Quelle: https://dev.to/jguillaumesio/stop-refunding-payments-you-should-never-have-charged-4d7m