You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Save card: SetupIntent -> create/reuse a Stripe Customer, attach the PaymentMethod, persist its id in payment_methods.remote_token (+ brand/last4/exp for display). Replaces the current last4-only PaymentMethodController::store for Stripe.
Off-session charge: a PaymentIntent with customer, payment_method, off_session=true, confirm=true for a renewal Invoice. Today StripeModule::capture() only creates an interactive intent (payment_method_types[]=card), so a new code path is needed.
Webhook: handle payment_intent.succeeded / payment_intent.payment_failed for off-session charges (extend processWebhook).
SCA / decline: on requires_action or decline, fall back to dunning (notify the customer to pay the invoice manually).
Reference implementation for the tokenized auto-pay epic #34. Maintainer-owned (the core lands here).
Deliver:
Tokenizablecapability contract, the real card-vault flow, the auto-pay step in the renewal path, dunning, and the one-click toggle.payment_methods.remote_token(+ brand/last4/exp for display). Replaces the current last4-onlyPaymentMethodController::storefor Stripe.customer,payment_method,off_session=true,confirm=truefor a renewalInvoice. TodayStripeModule::capture()only creates an interactive intent (payment_method_types[]=card), so a new code path is needed.payment_intent.succeeded/payment_intent.payment_failedfor off-session charges (extendprocessWebhook).requires_actionor decline, fall back to dunning (notify the customer to pay the invoice manually).Files:
modules/Gateways/Stripe/StripeModule.php,app/Http/Controllers/Client/PaymentMethodController.php,app/Services/InvoiceGenerationService.php,app/Services/PaymentService.php,app/Models/PaymentMethod.php.