Zahlungen über Stripe: eingebetteter Checkout, Webhooks, Abbruch, Storno und Erstattung #4

Closed
opened 2026-10-16 05:58:21 +00:00 by Nick.Rosenloecher · 0 comments
Owner

Ziel

Bezahlen direkt auf /checkout mit allen im Stripe-Dashboard aktivierten Zahlungsarten; jeder Geldfluss (Zahlung, Abbruch, Erstattung, Rückbuchung) wird im Shop korrekt verbucht.

Umgesetzt

  • Eingebetteter Checkout (ui_mode: "embedded_page") statt Weiterleitung, Prüfung der Rückkehr serverseitig (4ee5baf)
  • Dynamische Zahlungsarten (Karte, PayPal, SEPA, Klarna je nach Dashboard), verzögerte Zahlungen über async_payment_succeeded/failed
  • Webhook /api/checkout/webhook mit sechs Events inklusive charge.refunded und charge.dispute.created, Signaturprüfung, idempotent
  • Abgebrochener Checkout gibt Ware sofort frei und hinterlässt keine Bestellung (a3f91b8, dda0a66), Sitzungsdauer 32 Minuten, Abbruch-Token statt Bestellnummer
  • Stornierung im Admin erstattet bezahlte Bestellungen automatisch und schließt offene Sitzungen (1fa8dc9)
  • Härtung gegen Teilausfälle und Race Conditions (8b5d5d0, 3627f4e, 9b10a9f)
  • Geldpfade mit Tests abgesichert (dbf146c, src/app/api/checkout/*.test.ts)
  • Stripe-Schlüssel und Webhook-Secret sind im Cluster-Secret gesetzt (Schlüsselnamen geprüft, Werte nicht)

Offen

  • Inhaber prüft im Stripe-Dashboard: Live-Schlüssel statt Test-Schlüssel, Webhook-Endpunkt mit allen sechs Events abonniert, PayPal für den Live-Betrieb aktiviert (siehe #33)

Grundlage

README, Abschnitte „Stripe“, „Abgebrochener Checkout“, „Stornierung im Admin-Bereich“; docs/EINRICHTUNG.md Abschnitt 5. Rückfallnetz für verlorene Webhooks: #23.

Status

Code: ja · Geprüft: ja (Unit-Tests der Checkout-, Abbruch- und Webhook-Route, CI grün) · Gemergt: ja · Produktiv: ja (im Build sha-0d254db enthalten, laut Cluster-Abfrage 2026-10-16 live)
Stand: 2026-10-16 (Quelle: git origin/main 35e7c84, Cluster-Abfrage nur lesend am 2026-10-16, Session-Status, Memory)

## Ziel Bezahlen direkt auf `/checkout` mit allen im Stripe-Dashboard aktivierten Zahlungsarten; jeder Geldfluss (Zahlung, Abbruch, Erstattung, Rückbuchung) wird im Shop korrekt verbucht. ## Umgesetzt - [x] Eingebetteter Checkout (`ui_mode: "embedded_page"`) statt Weiterleitung, Prüfung der Rückkehr serverseitig (`4ee5baf`) - [x] Dynamische Zahlungsarten (Karte, PayPal, SEPA, Klarna je nach Dashboard), verzögerte Zahlungen über `async_payment_succeeded/failed` - [x] Webhook `/api/checkout/webhook` mit sechs Events inklusive `charge.refunded` und `charge.dispute.created`, Signaturprüfung, idempotent - [x] Abgebrochener Checkout gibt Ware sofort frei und hinterlässt keine Bestellung (`a3f91b8`, `dda0a66`), Sitzungsdauer 32 Minuten, Abbruch-Token statt Bestellnummer - [x] Stornierung im Admin erstattet bezahlte Bestellungen automatisch und schließt offene Sitzungen (`1fa8dc9`) - [x] Härtung gegen Teilausfälle und Race Conditions (`8b5d5d0`, `3627f4e`, `9b10a9f`) - [x] Geldpfade mit Tests abgesichert (`dbf146c`, `src/app/api/checkout/*.test.ts`) - [x] Stripe-Schlüssel und Webhook-Secret sind im Cluster-Secret gesetzt (Schlüsselnamen geprüft, Werte nicht) ## Offen - [ ] Inhaber prüft im Stripe-Dashboard: Live-Schlüssel statt Test-Schlüssel, Webhook-Endpunkt mit allen sechs Events abonniert, PayPal für den Live-Betrieb aktiviert (siehe #33) ## Grundlage README, Abschnitte „Stripe“, „Abgebrochener Checkout“, „Stornierung im Admin-Bereich“; docs/EINRICHTUNG.md Abschnitt 5. Rückfallnetz für verlorene Webhooks: #23. ## Status Code: ja · Geprüft: ja (Unit-Tests der Checkout-, Abbruch- und Webhook-Route, CI grün) · Gemergt: ja · Produktiv: ja (im Build sha-0d254db enthalten, laut Cluster-Abfrage 2026-10-16 live) Stand: 2026-10-16 (Quelle: git origin/main 35e7c84, Cluster-Abfrage nur lesend am 2026-10-16, Session-Status, Memory)
Nick.Rosenloecher added the art/featureprio/hochstatus/erledigt labels 2026-10-16 05:58:21 +00:00
Sign in to join this conversation.