Stripe
Stripe im Backend
Stripe verbindet den Shop mit Stripe Checkout, speichert API-Schlüssel pro Shop und verarbeitet erfolgreiche oder fehlgeschlagene Stripe-Zahlungen über signierte Webhooks.
Einordnung und Voraussetzungen
Stripe ist eine Anbieter-Unterseite der Zahlungsarten. Allgemeine Regeln wie Aktivstatus, Reihenfolge, Kosten, Wertgrenzen, Kundengruppen, Versandarten und Versandzonen bleiben auf der Hauptseite der Zahlungsarten gepflegt. Diese Seite beschreibt die Stripe-spezifische Konfiguration.
- Shop-Bezug: Die Konfiguration wird je Multishop im Bereich
stripegespeichert. - Automatische Initialisierung: Fehlende Variablen werden je Shop angelegt. Dazu gehören
public_key,secret_key,payment_method_types,order_status_ok,order_status_error,status_ok_createBill,status_ok_sendBillundendpoint_secret. - Checkout-Verfügbarkeit: Stripe kann im Checkout nur erscheinen, wenn die allgemeine Zahlungsart für den aktuellen Warenkorb- und Versandkontext erlaubt ist.
- Keine eigene Liste: Diese Seite hat keine Suchmaske, keine Datentabelle und keine Optionsspalte. Die Verwaltung erfolgt über ein Formular.
Zugangsdaten und Webhook-Secret
| Feld | Zweck und Wirkung |
|---|---|
public_key Public API Key | Öffentlicher Stripe-Schlüssel der verwendeten Stripe-Umgebung. |
secret_key Secret API Key | Geheimer Stripe-Schlüssel. Das Modul nutzt diesen Wert zum Erstellen von Checkout-Sessions und Webhook-Endpunkten. |
endpoint_secret Webhook Secret Key | Signatur-Secret für eingehende Stripe-Webhooks. Beim Speichern versucht das Modul automatisch einen Webhook-Endpunkt zu erstellen, wenn dieses Feld leer ist. |
Zahlungsmethoden
Das Feld payment_method_types steuert, ob der Shop Stripe konkrete Zahlungsmethoden vorgibt.
- Standardwert:
card. - Mehrere Methoden: Werte werden kommagetrennt eingetragen und beim Checkout an Stripe übergeben.
- Leeres Feld: Das Modul übergibt keine expliziten Methoden. Dann greift die Steuerung aus der Stripe-Konfiguration.
Beim Erstellen der Checkout-Session wird payment_method_types nur gesetzt, wenn das Feld nicht leer ist.
Status und Rechnung
| Feld | Zweck |
|---|---|
order_status_ok | Bestellstatus nach erfolgreichem Stripe-Webhook. Das Modul setzt diesen Status beim Erfüllen der Bestellung. |
order_status_error | Bestellstatus bei fehlgeschlagener asynchroner Zahlung. |
status_ok_createBill | Übergibt an die Checkout-Rechnungslogik, ob nach erfolgreicher Zahlung eine Rechnung erzeugt wird. Im neuen Backend ist der Schalter ohne aktives FiBu-Modul deaktiviert. |
status_ok_sendBill | Übergibt an die Checkout-Rechnungslogik, ob die erzeugte Rechnung versendet wird. Auch dieser Schalter hängt im neuen Backend vom FiBu-Modul ab. |
Speichern und automatische Webhook-Erstellung
Beim Speichern werden die Formularwerte für den ausgewählten Shop übernommen. Wenn endpoint_secret leer ist, speichert das Modul zuerst die übrigen Werte, erstellt danach einen Stripe-Webhook-Endpunkt und schreibt das zurückgelieferte Secret in die Konfiguration.
Der automatisch angelegte Webhook zeigt auf den Stripe-Eingang des Shops und abonniert folgende Events:
checkout.session.completedcheckout.session.async_payment_succeededcheckout.session.async_payment_failed
Checkout-Ablauf
- Im Checkout wird Stripe als Zahlungsart ausgewählt.
- Das Modul lädt die Stripe-Konfiguration und setzt den geheimen API-Schlüssel.
- Es erstellt eine Stripe-Checkout-Session mit Erfolgs- und Abbruchziel, Kunden-E-Mail, Modus
payment, Metadatumorder_id, Bestellnummer alsclient_reference_idund einer Position für den kompletten Bruttobestellwert. - Wenn
payment_method_typesgefüllt ist, werden die kommagetrennten Zahlungsmethoden an Stripe übergeben. - Die erstellte Checkout-Session wird im Tageslog protokolliert.
- Der Browser wird mit HTTP-Status 303 zur Stripe-Zahlungsseite weitergeleitet.
Rückkehr aus Stripe
- Erfolg: Bei erfolgreicher Rückkehr markiert das Backend die Bestellung als abgeschlossen, aktualisiert Gutscheincodes, leert den Warenkorb, erhöht den Kundschaftsumsatz und versendet bei aktivierter Shop-Einstellung die Bestellbestätigung. Der finale Zahlungsstatus wird zusätzlich über Webhooks verarbeitet.
- Abbruch: Wenn die Bestellung noch nicht fertig ist, wird diese gelöscht und der Warenkorb erneut angezeigt. Ist die Bestellung bereits fertig, bleiben Bestelldaten erhalten und der Warenkorb wird geleert.
- Initialer Aufruf: Ohne Erfolg oder Abbruch setzt das Modul die Zahlungsfreigabe für den weiteren Checkout-Ablauf und hält den Warenkorb bis zur Rückmeldung zurück.
Webhook-Verarbeitung
Der öffentliche Stripe-Eingang lädt das Stripe-Modul und ruft die Webhook-Verarbeitung auf. Der Payload wird mit endpoint_secret und dem Stripe-Signaturheader geprüft. Ungültige Payloads oder Signaturen führen zu HTTP 400 und werden protokolliert.
| Event | Backend-Wirkung |
|---|---|
checkout.session.completed | Ordnet die Session über metadata.order_id und client_reference_id der Bestellung zu. Nur bei Stripe-Zahlungsstatus paid wird die Bestellung erfüllt. |
checkout.session.async_payment_succeeded | Ordnet die Session der Bestellung zu und erfüllt die Bestellung nach verzögerter erfolgreicher Zahlung. |
checkout.session.async_payment_failed | Ordnet die Session der Bestellung zu und setzt den Status aus order_status_error. |
| Unbekanntes Event | Wird im Stripe-Log als unbekannter Event dokumentiert und mit HTTP 200 bestätigt. |
Beim Erfüllen einer Bestellung setzt das Modul order_status_ok, schreibt einen Logeintrag und ruft die Rechnungslogik mit status_ok_createBill und status_ok_sendBill auf.
Logs und Prüfung
Stripe stellt einen Admin-Logviewer für tägliche Logdateien bereit. Die Loganzeige nutzt den Prefix stripe und maskiert Secrets sowie Tokens zusätzlich.
- Nach Änderung von API-Schlüsseln prüfen, ob das passende
endpoint_secretgespeichert ist. - Nach Änderung von
payment_method_typeseine Checkout-Session mit passender Zahlungsart testen. - Nach Änderung der Statusfelder eine erfolgreiche Zahlung und einen Fehlerfall prüfen.
- Bei Rechnungserstellung testen, ob FiBu-Modul, Rechnungserzeugung und Rechnungsversand zusammen aktiv sind.
- Im Stripe-Logviewer kontrollieren, ob Checkout-Session, Webhook-Eingang und Bestellzuordnung protokolliert werden.