Stripe-Webhooks, Zahlungszustände und Buchungsstatusseite #6

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

Ziel

Zahlungen ausschließlich über signierte Stripe-Webhooks oder den Abgleich des Workers verbuchen. Doppelte, verspätete und ungeordnete Events dürfen keinen falschen Zustand erzeugen.

Umgesetzt

  • /api/stripe/webhook: Signaturprüfung gegen den unveränderten Body, jedes Event genau einmal über StripeEvent (src/lib/webhook.ts)
  • Verarbeitete Events: checkout.session.completed, …async_payment_succeeded, …async_payment_failed, …expired, invoice.paid, invoice.payment_failed, invoice.payment_action_required, charge.refunded, refund.created, refund.updated, charge.dispute.created
  • Getrennte Buchungs- und Zahlungszustände, monotone Übergänge unter Buchungssperre; verspätete Zahlung ohne freien Platz wird „Prüfung nötig“ statt Überbuchung (ADR-5)
  • Buchungsstatusseite /buchung/status/[token] (nicht indexiert) zeigt nur den Datenbankstand, Aktionen über /api/booking/status-action
  • Livemodus-Events im Testbetrieb werden abgewiesen

Grundlage

docs/ARCHITEKTUR.md (ADR-5), docs/BETRIEB.md Abschnitt 4 (Webhook-Endpunkt und Events), tests/payments.integration.test.ts. Webhook-Secrets für Test und Live: #22.

Status

Code: ja · Geprüft: ja (Integrationstests) · Gemergt: ja · Produktiv: ja (im Cluster belegt ausgerollt sha-5a88f3d am 13.10.2026)
Stand: 2026-10-16 (Quelle: git origin/main 9785eb2, Gitea-CI-Läufe und Registry, Memory der Sessions)

## Ziel Zahlungen ausschließlich über signierte Stripe-Webhooks oder den Abgleich des Workers verbuchen. Doppelte, verspätete und ungeordnete Events dürfen keinen falschen Zustand erzeugen. ## Umgesetzt - [x] `/api/stripe/webhook`: Signaturprüfung gegen den unveränderten Body, jedes Event genau einmal über `StripeEvent` (`src/lib/webhook.ts`) - [x] Verarbeitete Events: `checkout.session.completed`, `…async_payment_succeeded`, `…async_payment_failed`, `…expired`, `invoice.paid`, `invoice.payment_failed`, `invoice.payment_action_required`, `charge.refunded`, `refund.created`, `refund.updated`, `charge.dispute.created` - [x] Getrennte Buchungs- und Zahlungszustände, monotone Übergänge unter Buchungssperre; verspätete Zahlung ohne freien Platz wird „Prüfung nötig“ statt Überbuchung (ADR-5) - [x] Buchungsstatusseite `/buchung/status/[token]` (nicht indexiert) zeigt nur den Datenbankstand, Aktionen über `/api/booking/status-action` - [x] Livemodus-Events im Testbetrieb werden abgewiesen ## Grundlage `docs/ARCHITEKTUR.md` (ADR-5), `docs/BETRIEB.md` Abschnitt 4 (Webhook-Endpunkt und Events), `tests/payments.integration.test.ts`. Webhook-Secrets für Test und Live: #22. ## Status Code: ja · Geprüft: ja (Integrationstests) · Gemergt: ja · Produktiv: ja (im Cluster belegt ausgerollt sha-5a88f3d am 13.10.2026) Stand: 2026-10-16 (Quelle: git origin/main 9785eb2, Gitea-CI-Läufe und Registry, Memory der Sessions)
Nick.Rosenloecher added the status/erledigtart/featureprio/hoch labels 2026-10-16 05:54:42 +00:00
Sign in to join this conversation.