Die wichtigste Regel steht vor der ersten Zeile Code: Der Zahlungsstatus wird nie
im Browser entschieden. Der Browser zeigt eine Oberfläche, mehr nicht. Betrag, Währung und die
Absicht, diesen Betrag einzuziehen, entstehen auf dem Server — dort, wo niemand mit den
Entwicklerwerkzeugen dazwischengeht.
Der Ablauf beginnt deshalb mit einem serverseitigen Endpunkt, der eine
Zahlungsabsicht erzeugt — bei Stripe ein PaymentIntent. Die
Dokumentation empfiehlt, ihn anzulegen, sobald der Betrag feststeht, damit auch abgebrochene Versuche
erfasst werden. Zurück ins Frontend geht nur das Client-Secret
dieser einen Zahlungsabsicht. Der geheime Schlüssel bleibt, wo er hingehört.
Im Frontend steht danach die Bezahlstrecke: entweder Stripe Elements, in das
eigene Layout eingebaut, oder die von Stripe gehostete Bezahlseite. Beide Wege haben denselben
Vorteil, und der ist kein Detail — die Zahlungsdaten gehen direkt an Stripe und laufen nicht über
deinen Server. Stripe beschreibt genau das als risikoarme Integration; die
PCI-Reichweite bleibt damit klein, statt eine dreistellige Zahl an
Sicherheitsanforderungen ins eigene Haus zu holen.
Bestätigt wird über den Webhook. Stripe meldet Ereignisse wie
payment_intent.succeeded und
payment_intent.payment_failed an einen zweiten serverseitigen
Endpunkt — und erst dieses Ereignis schaltet Bestellung, Zugang oder Rechnung frei. Die Doku rät
ausdrücklich davon ab, die Abwicklung clientseitig zu behandeln: Kundinnen und Kunden können die
Seite nach der Zahlung verlassen, bevor der Prozess überhaupt beginnt. Wiederholtes Abfragen ist
möglich, laut Doku aber weitaus weniger zuverlässig.
Und dann das, was in Angeboten gern fehlt: der Fehlerfall. Jeder schreibende
Aufruf an Stripe bekommt einen Idempotenz-Schlüssel, damit ein Netzwerkabbruch keine zweite Buchung
erzeugt. Der Webhook-Endpunkt antwortet sofort mit einem 2xx-Status und arbeitet danach im
Hintergrund weiter, weil Stripe im Live-Modus bis zu drei Tage lang erneut zustellt. Ereignis-IDs
werden protokolliert, weil dieselbe Meldung mehrfach und in beliebiger Reihenfolge ankommen kann.
Wie wir solche Anbindungen abnehmen und betreiben, steht in der Leistung
Schnittstellenentwicklung.