Stripe-Integration (S4, S5, S7.6): Abos, Zahlungsart ändern, Zahlarten-Kommunikation

Phase S4 – Abos über Stripe (E2E komplett im Testmodus):
- Abo-/Recovery-Checkout: customer_creation=always + setup_future_usage=off_session
- StripePaymentService::chargeAbo (off-session PaymentIntent, Idempotency-Key),
  StripeGateway, Provider-Dispatch im Abbuchungs-Cron (PAYONE-Pfad unverändert)
- Webhook: Zahlungsmittel-Capture vor Paid-Pfad, 503 payment_not_yet_visible bei
  Cron-Transaktions-Race; Command stripe:process-pending-events (Cron-Ende + 10-min
  Scheduler) verarbeitet liegengebliebene Events nach
- createNewAbo/advanceAboAfterRecoveryPayment Stripe-aware inkl. Race-Absicherung;
  Recovery-Orders nutzen advanceAboAfterRecoveryPayment (latenter PAYONE-Duplikat-Bug)
- Migrationen: Stripe-Abo-Spalten auf shopping_payments; clearingtype varchar(3)→(20)
  inkl. Reparatur der zu 'str' gekürzten Live-Zeilen

Phase S5 – Zahlungsart ändern (Scope: jede Zahlart, nicht nur Kreditkarte):
- Stripe Checkout mode=setup ohne Abbuchung; PAYONE-Abos ziehen beim Wechsel auf
  Stripe um (Auslaufmodell §7.2)
- AboPaymentMethodService: beginStripeChange/finalize/applyStripePaymentMethod
  (idempotent, detacht alte PM, card_changes-Log); Webhook setup_intent.succeeded
  als Sicherheitsnetz; Einstiege Portal/CRM/Berater-Kunden-Link flow-abhängig
- Views/Mails flow-abhängig („Zahlungsweise" statt „Kreditkarte")

Phase S7.6 – Zahlarten-Kommunikation:
- Einheitliche Zahlarten-Logos (SVG) + wiederverwendbares Partial payment_logos;
  Checkout/Footer zeigen Kern-Zahlarten + „···"-Icon, /zahlungsarten komplett neu
  mit allen aktiven Stripe-Zahlarten (gegen Account-Konfiguration verifiziert)
  und Vorkasse (PAYONE); Sofort/SEPA entfernt

Tests: StripeAboTest (15), StripePaymentMethodChangeTest (10),
PaymentMethodsCommunicationTest (28), PaymentProviderManagerTest angepasst.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kevin 2026-07-09 14:45:17 +00:00
parent 6f21845607
commit ce4750fd1a
68 changed files with 2856 additions and 236 deletions

View file

@ -278,4 +278,18 @@ return [
'card_expiry_invalid' => 'Bitte geben Sie ein gültiges Ablaufdatum an.',
'card_type_invalid' => 'Bitte wählen Sie einen gültigen Kartentyp (Visa oder Mastercard).',
'card_cvc_invalid' => 'Bitte geben Sie eine gültige Prüfziffer (CVC) ein.',
// Zahlungsart ändern über Stripe (Plan S5, dev/2026-07-08-stripe/)
'payment_method_change_title' => 'Zahlungsart ändern',
'payment_method_change_intro' => 'Wähle auf der sicheren Zahlungsseite deine neue Zahlungsart für dieses Abo — zum Beispiel wenn deine Karte abgelaufen ist oder du künftig anders zahlen möchtest.',
'payment_method_change_no_charge' => 'Es wird nichts abgebucht — die neue Zahlungsart gilt ab der nächsten Abo-Abbuchung.',
'payment_method_change_button' => 'Neue Zahlungsart wählen',
'payment_method_change_success' => 'Deine Zahlungsart wurde aktualisiert. Die nächste Abbuchung erfolgt über die neue Zahlungsart.',
'payment_method_change_failed' => 'Die Zahlungsart konnte nicht geändert werden. Bitte versuche es erneut.',
'current_payment_method' => 'Aktuelle Zahlungsart',
'payment_method_change_done_title' => 'Zahlungsart aktualisiert',
'payment_method_change_done_failed_copy' => 'Die Zahlungsart konnte nicht geändert werden. Bitte fordere bei Bedarf einen neuen Link an.',
'payment_method_change_link_mail_subject' => 'Zahlungsart für dein Abo aktualisieren',
'payment_method_change_link_mail_intro' => 'Bitte aktualisiere die Zahlungsart für dein Abo über den folgenden sicheren Link. Deine neue Zahlungsart wählst du direkt auf der sicheren Seite unseres Zahlungsdienstleisters Stripe — es wird dabei nichts abgebucht.',
'payment_method_change_link_mail_button' => 'Zahlungsart aktualisieren',
];