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:

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:

  1. Erstellen Sie einen PaymentIntent mit manueller Einziehung (manual capture).
  2. Die Gelder werden autorisiert, aber nicht bewegt.
  3. Führen Sie Ihre Bestellvalidierung durch.
  4. Wenn die Bestellung gültig ist, ziehen Sie die Zahlung ein (capture).
  5. Wenn die Bestellung fehlschlägt, stornieren Sie den Intent.

Dieser Ansatz bietet mehrere Vorteile:

Die meisten großen Zahlungsanbieter verwenden dieselbe Logik.

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