feat: Stripe Embedded Checkout statt Weiterleitung zu checkout.stripe.com
Bezahlt wird jetzt direkt auf /checkout: die Checkout-Session laeuft mit ui_mode "embedded_page", das Zahlungsformular ist ein Stripe-iframe (PCI SAQ A bleibt). PayPal, Karte, SEPA und Klarna kommen weiterhin dynamisch aus dem Dashboard. - Zahlungsschritt ersetzt das Formular; "Zurueck zu deinen Angaben" gibt Sitzung und Bestand sofort frei (POST /api/checkout/cancel) und behaelt alle Eingaben, Turnstile wird neu geladen - Rueckkehrseite prueft serverseitig bei Stripe und gleicht die Sitzung mit der eigenen Bestellung ab; bei abgebrochener PayPal-Zahlung wird dieselbe Sitzung erneut eingebettet - Erneuter Versuch und Abbruch sind per HttpOnly-Cookie an den bestellenden Browser gebunden, die session_id in der URL allein reicht nicht - Alte /checkout/cancel?ref= Links aendern per GET nichts mehr - CSP um die Stripe-Hosts fuer Embedded Checkout und 3-D-Secure erweitert - STRIPE_PUBLISHABLE_KEY zur Laufzeit gelesen (kein NEXT_PUBLIC_), mit Preflight-Pruefung auf pk_live und Schutz gegen versehentliche sk_/rk_ Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
1 parent
6ac7cc5d1f
commit
4ee5bafe20
28 files changed
+1272
-179
No files matched your search
+6
-5
@@ -22,12 +22,13 @@ MYSQL_DATABASE=wabenhain
|
||||
|
||||
# Stripe (Test-Keys aus dem Stripe-Dashboard, https://dashboard.stripe.com/test/apikeys)
|
||||
#
|
||||
# Nur der geheime Schluessel wird gebraucht: der Checkout laeuft vollstaendig
|
||||
# serverseitig ueber eine Stripe-Checkout-Session (src/app/api/checkout/), der
|
||||
# Browser wird lediglich weitergeleitet. Einen veroeffentlichbaren Schluessel
|
||||
# (pk_...) braeuchte erst eine clientseitige Einbindung wie Stripe Elements —
|
||||
# solange es die nicht gibt, waere er Konfiguration, die nichts tut.
|
||||
# Serverseitiger Schluessel fuer Checkout-Sessions, Erstattungen und Webhooks.
|
||||
# Empfohlen: ein eingeschraenkter Schluessel (rk_...) statt des vollen sk_...
|
||||
STRIPE_SECRET_KEY=sk_test_xxxxxxxxxxxxxxxxxxxxxxxx
|
||||
# Oeffentlicher Schluessel fuer das eingebettete Zahlungsformular auf /checkout.
|
||||
# Bewusst OHNE NEXT_PUBLIC_: wird zur Laufzeit gelesen, nicht beim Build
|
||||
# eingebrannt. Muss zum Modus des geheimen Schluessels passen (test/live).
|
||||
STRIPE_PUBLISHABLE_KEY=pk_test_xxxxxxxxxxxxxxxxxxxxxxxx
|
||||
# Webhook-Secret aus `stripe listen` bzw. dem Stripe-Dashboard-Webhook-Endpoint
|
||||
STRIPE_WEBHOOK_SECRET=whsec_xxxxxxxxxxxxxxxxxxxxxxxx
|
||||
|
||||
|
||||
Reference in new issue
Block a user