Stripe-Integration (S0–S3): Einmalzahlungen über Stripe Checkout + Notfall-Go-Live

Wegen PAYONE-Ausfall vorgezogen live geschaltet: alle Einmalzahlungen
(Shop + Salescenter) laufen über Stripe Hosted Checkout, Abos sind bis
Phase S4 eingefroren.

- Provider-Abstraktion: PaymentProvider-Enum, PaymentGatewayInterface,
  PaymentProviderManager (Settings-Schalter, provider-treu je Bestand),
  PayoneGateway als unveränderter Adapter
- StripePaymentService: Checkout Session (eine Gesamtposition, Metadata,
  success/cancel-Redirects), StripeClientWrapper (lazy, Dark Launch),
  StripeCustomerService, StripeTransactionRecorder (client_secret-Redaction)
- Webhook /stripe/webhook: Signaturprüfung, Idempotenz über
  stripe_webhook_events (Crash-Retry-Reprocessing), txaction-Prioritäten,
  Betrags-Guard, lockForUpdate-Paid-Pfad, genau eine Bestätigungsmail
- Zahlungsmethoden-Anzeige aus charge.succeeded (carddata inkl. Wallet,
  auftragsunabhängiges Backfill aus dem Event-Store)
- Checkout: Wartungsmodus mit Admin-Bypass, Abo-Freeze-Hinweis,
  Stripe-Option (Online-Zahlung) statt Zahlartenwahl, Vorkasse ausblendbar
- Abo-Freeze-Guards: Cron user:make_abo_order, Retry, Kartenupdate
- Admin-Settings-Karte Zahlungen (Provider, Wartung, Freeze, Vorkasse)
- Hotfix: 500 bei Vorkasse ohne Clearing-Daten in admin/sales/_detail
  und checkout-final (PAYONE-Ausfall)
- Doku dev/2026-07-08-stripe/ (Plan S0–S8, Konzept, IST-Analyse)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kevin 2026-07-08 15:56:41 +00:00
parent 1108381988
commit e1da90ff91
48 changed files with 4428 additions and 831 deletions

View file

@ -1,9 +0,0 @@
<?php return array (
'App\\Providers\\EventServiceProvider' =>
array (
'App\\Events\\Event' =>
array (
0 => 'App\\Listeners\\EventListener',
),
),
);

View file

@ -123,6 +123,13 @@
0 => 'Laravel\\Sail\\SailServiceProvider',
),
),
'laravel/sentinel' =>
array (
'providers' =>
array (
0 => 'Laravel\\Sentinel\\SentinelServiceProvider',
),
),
'laravel/tinker' =>
array (
'providers' =>

View file

@ -38,28 +38,29 @@
34 => 'Laravel\\Passport\\PassportServiceProvider',
35 => 'Laravel\\Roster\\RosterServiceProvider',
36 => 'Laravel\\Sail\\SailServiceProvider',
37 => 'Laravel\\Tinker\\TinkerServiceProvider',
38 => 'Laravel\\Ui\\UiServiceProvider',
39 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
40 => 'Carbon\\Laravel\\ServiceProvider',
41 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
42 => 'Termwind\\Laravel\\TermwindServiceProvider',
43 => 'Pest\\Laravel\\PestServiceProvider',
44 => 'Spatie\\Html\\HtmlServiceProvider',
45 => 'Spatie\\LaravelIgnition\\IgnitionServiceProvider',
46 => 'Yajra\\DataTables\\DataTablesServiceProvider',
47 => 'Laravel\\Tinker\\TinkerServiceProvider',
48 => 'Acme\\Dhl\\DhlServiceProvider',
49 => 'App\\Providers\\AppServiceProvider',
50 => 'App\\Providers\\AuthServiceProvider',
51 => 'App\\Providers\\EventServiceProvider',
52 => 'App\\Providers\\HorizonServiceProvider',
53 => 'App\\Providers\\RouteServiceProvider',
54 => 'Jenssegers\\Date\\DateServiceProvider',
55 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
56 => 'Yajra\\DataTables\\DataTablesServiceProvider',
57 => 'App\\Providers\\YardServiceProvider',
58 => 'Alban\\LaravelCollectiveSpatieHtmlParser\\ServiceProvider',
37 => 'Laravel\\Sentinel\\SentinelServiceProvider',
38 => 'Laravel\\Tinker\\TinkerServiceProvider',
39 => 'Laravel\\Ui\\UiServiceProvider',
40 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
41 => 'Carbon\\Laravel\\ServiceProvider',
42 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
43 => 'Termwind\\Laravel\\TermwindServiceProvider',
44 => 'Pest\\Laravel\\PestServiceProvider',
45 => 'Spatie\\Html\\HtmlServiceProvider',
46 => 'Spatie\\LaravelIgnition\\IgnitionServiceProvider',
47 => 'Yajra\\DataTables\\DataTablesServiceProvider',
48 => 'Laravel\\Tinker\\TinkerServiceProvider',
49 => 'Acme\\Dhl\\DhlServiceProvider',
50 => 'App\\Providers\\AppServiceProvider',
51 => 'App\\Providers\\AuthServiceProvider',
52 => 'App\\Providers\\EventServiceProvider',
53 => 'App\\Providers\\HorizonServiceProvider',
54 => 'App\\Providers\\RouteServiceProvider',
55 => 'Jenssegers\\Date\\DateServiceProvider',
56 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
57 => 'Yajra\\DataTables\\DataTablesServiceProvider',
58 => 'App\\Providers\\YardServiceProvider',
59 => 'Alban\\LaravelCollectiveSpatieHtmlParser\\ServiceProvider',
),
'eager' =>
array (
@ -85,26 +86,27 @@
19 => 'Laravel\\Mcp\\Server\\McpServiceProvider',
20 => 'Laravel\\Passport\\PassportServiceProvider',
21 => 'Laravel\\Roster\\RosterServiceProvider',
22 => 'Laravel\\Ui\\UiServiceProvider',
23 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
24 => 'Carbon\\Laravel\\ServiceProvider',
25 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
26 => 'Termwind\\Laravel\\TermwindServiceProvider',
27 => 'Pest\\Laravel\\PestServiceProvider',
28 => 'Spatie\\Html\\HtmlServiceProvider',
29 => 'Spatie\\LaravelIgnition\\IgnitionServiceProvider',
30 => 'Yajra\\DataTables\\DataTablesServiceProvider',
31 => 'Acme\\Dhl\\DhlServiceProvider',
32 => 'App\\Providers\\AppServiceProvider',
33 => 'App\\Providers\\AuthServiceProvider',
34 => 'App\\Providers\\EventServiceProvider',
35 => 'App\\Providers\\HorizonServiceProvider',
36 => 'App\\Providers\\RouteServiceProvider',
37 => 'Jenssegers\\Date\\DateServiceProvider',
38 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
39 => 'Yajra\\DataTables\\DataTablesServiceProvider',
40 => 'App\\Providers\\YardServiceProvider',
41 => 'Alban\\LaravelCollectiveSpatieHtmlParser\\ServiceProvider',
22 => 'Laravel\\Sentinel\\SentinelServiceProvider',
23 => 'Laravel\\Ui\\UiServiceProvider',
24 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
25 => 'Carbon\\Laravel\\ServiceProvider',
26 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
27 => 'Termwind\\Laravel\\TermwindServiceProvider',
28 => 'Pest\\Laravel\\PestServiceProvider',
29 => 'Spatie\\Html\\HtmlServiceProvider',
30 => 'Spatie\\LaravelIgnition\\IgnitionServiceProvider',
31 => 'Yajra\\DataTables\\DataTablesServiceProvider',
32 => 'Acme\\Dhl\\DhlServiceProvider',
33 => 'App\\Providers\\AppServiceProvider',
34 => 'App\\Providers\\AuthServiceProvider',
35 => 'App\\Providers\\EventServiceProvider',
36 => 'App\\Providers\\HorizonServiceProvider',
37 => 'App\\Providers\\RouteServiceProvider',
38 => 'Jenssegers\\Date\\DateServiceProvider',
39 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
40 => 'Yajra\\DataTables\\DataTablesServiceProvider',
41 => 'App\\Providers\\YardServiceProvider',
42 => 'Alban\\LaravelCollectiveSpatieHtmlParser\\ServiceProvider',
),
'deferred' =>
array (