Bezahlen direkt auf /checkout mit allen im Stripe-Dashboard aktivierten Zahlungsarten; jeder Geldfluss (Zahlung, Abbruch, Erstattung, Rückbuchung) wird im Shop korrekt verbucht.
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)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Ziel
Bezahlen direkt auf
/checkoutmit allen im Stripe-Dashboard aktivierten Zahlungsarten; jeder Geldfluss (Zahlung, Abbruch, Erstattung, Rückbuchung) wird im Shop korrekt verbucht.Umgesetzt
ui_mode: "embedded_page") statt Weiterleitung, Prüfung der Rückkehr serverseitig (4ee5baf)async_payment_succeeded/failed/api/checkout/webhookmit sechs Events inklusivecharge.refundedundcharge.dispute.created, Signaturprüfung, idempotenta3f91b8,dda0a66), Sitzungsdauer 32 Minuten, Abbruch-Token statt Bestellnummer1fa8dc9)8b5d5d0,3627f4e,9b10a9f)dbf146c,src/app/api/checkout/*.test.ts)Offen
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)