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:
parent
6f21845607
commit
ce4750fd1a
68 changed files with 2856 additions and 236 deletions
|
|
@ -118,27 +118,7 @@
|
|||
<div class="col-sm-1 col-md-2">
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-10 col-md-8 text-center">
|
||||
<div class="row">
|
||||
<div class="col-xs-2 col-sm-2 col-md-2">
|
||||
<img class="img-responsive" src="/images/payments-assets/paypal.png" alt="">
|
||||
</div>
|
||||
|
||||
<div class="col-xs-2 col-sm-2 col-md-2">
|
||||
<img class="img-responsive" src="/images/payments-assets/sofort.png" alt="">
|
||||
</div>
|
||||
|
||||
<div class="col-xs-2 col-sm-2 col-md-2">
|
||||
<img class="img-responsive" src="/images/payments-assets/sepa.png" alt="">
|
||||
</div>
|
||||
|
||||
<div class="col-xs-2 col-sm-2 col-md-2">
|
||||
<img class="img-responsive" src="/images/payments-assets/creditcard.png" alt="">
|
||||
</div>
|
||||
|
||||
<div class="col-xs-2 col-sm-2 col-md-2">
|
||||
<img class="img-responsive" src="/images/payments-assets/vor.png" alt="">
|
||||
</div>
|
||||
</div>
|
||||
@include('web.layouts.includes.payment_logos', ['logoHeight' => 28, 'wrapperClass' => 'text-center'])
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
51
resources/views/web/layouts/includes/payment_logos.blade.php
Normal file
51
resources/views/web/layouts/includes/payment_logos.blade.php
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
{{--
|
||||
Zahlarten-Logos (Plan S7.6): einheitliche Logo-Leiste für Footer, Checkout und /zahlungsarten.
|
||||
Standard: Kern-Zahlarten + „···"-Icon (Weitere Zahlarten). $showAll = true zeigt zusätzlich
|
||||
die regionalen Zahlarten (BLIK, MB WAY, Pix, …) statt des „···"-Icons.
|
||||
Parameter: $logoHeight (px, Default 24), $showVorkasse (Default true), $showAll (Default false),
|
||||
$wrapperClass (optional).
|
||||
--}}
|
||||
@php($logoHeight = $logoHeight ?? 24)
|
||||
@php($showVorkasse = $showVorkasse ?? true)
|
||||
@php($showAll = $showAll ?? false)
|
||||
@php($paymentLogos = [
|
||||
'visa' => 'Visa',
|
||||
'mastercard' => 'Mastercard',
|
||||
'amex' => 'American Express',
|
||||
'paypal' => 'PayPal',
|
||||
'applepay' => 'Apple Pay',
|
||||
'googlepay' => 'Google Pay',
|
||||
'klarna' => 'Klarna',
|
||||
'amazonpay' => 'Amazon Pay',
|
||||
'link' => 'Link',
|
||||
'eps' => 'EPS',
|
||||
'bancontact' => 'Bancontact',
|
||||
])
|
||||
@php($morePaymentLogos = [
|
||||
'blik' => 'BLIK',
|
||||
'mbway' => 'MB WAY',
|
||||
'pix' => 'Pix',
|
||||
'satispay' => 'Satispay',
|
||||
'samsungpay' => 'Samsung Pay',
|
||||
'kakaopay' => 'Kakao Pay',
|
||||
'naverpay' => 'Naver Pay',
|
||||
'payco' => 'PAYCO',
|
||||
])
|
||||
@php($visibleLogos = $showAll ? array_merge($paymentLogos, $morePaymentLogos) : $paymentLogos)
|
||||
<div class="payment-logos {{ $wrapperClass ?? '' }}" style="line-height: 1;">
|
||||
@foreach ($visibleLogos as $paymentLogoFile => $paymentLogoLabel)
|
||||
<img src="{{ asset('images/payments-assets/'.$paymentLogoFile.'.svg') }}"
|
||||
alt="{{ $paymentLogoLabel }}" title="{{ $paymentLogoLabel }}"
|
||||
style="height: {{ $logoHeight }}px; width: auto; margin: 2px 3px 2px 0; vertical-align: middle;">
|
||||
@endforeach
|
||||
@if ($showVorkasse)
|
||||
<img src="{{ asset('images/payments-assets/vorkasse.svg') }}"
|
||||
alt="{{ __('payment.prepayment_payone') }}" title="{{ __('payment.prepayment_payone') }}"
|
||||
style="height: {{ $logoHeight }}px; width: auto; margin: 2px 3px 2px 0; vertical-align: middle;">
|
||||
@endif
|
||||
@unless ($showAll)
|
||||
<img src="{{ asset('images/payments-assets/more.svg') }}"
|
||||
alt="{{ __('weborder.payment_method_more') }}" title="{{ __('weborder.payment_method_more') }}"
|
||||
style="height: {{ $logoHeight }}px; width: auto; margin: 2px 3px 2px 0; vertical-align: middle;">
|
||||
@endunless
|
||||
</div>
|
||||
|
|
@ -955,14 +955,20 @@
|
|||
<i></i> <span class="weight-400"><span class="fa fa-check text-primary"></span> {{ __('payment.stripe_online') }}</span>
|
||||
<img class="float-right" width="90" src="{{asset('images/payments-assets/stripe.png')}}" alt="Stripe">
|
||||
</label>
|
||||
<div class="mb-1">
|
||||
@include('web.layouts.includes.payment_logos', ['showVorkasse' => false, 'logoHeight' => 26])
|
||||
</div>
|
||||
<p class="fs-13 mb-1">{{ __('payment.stripe_online_methods') }}</p>
|
||||
<p class="fs-12 text-muted mb-0">{{ __('payment.stripe_online_copy') }}</p>
|
||||
@if(!empty($is_abo))
|
||||
<p class="fs-12 text-muted mb-0 mt-1">{{ __('payment.stripe_abo_hint') }}</p>
|
||||
@endif
|
||||
</div>
|
||||
@if(array_key_exists('VOR', $payment_methods_active) && in_array($payment_methods_active['VOR'], $payment_methods))
|
||||
<div class="col-lg-12 nomargin clearfix">
|
||||
<label class="mt-4 fs-14 fw-400 radio pull-left" style="width: 100%">
|
||||
{!! Form::radio('payment_method', 'vor', '') !!}
|
||||
<i></i> <span class="weight-400"><span class="fa fa-check text-primary"></span> {{ __('payment.prepayment') }}</span>
|
||||
<i></i> <span class="weight-400"><span class="fa fa-check text-primary"></span> {{ __('payment.prepayment_payone') }}</span>
|
||||
<img class="float-right" width="90" src="{{asset('images/payments-assets/vor.png')}}" alt="Vorkasse">
|
||||
</label>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -8,46 +8,19 @@
|
|||
<h3 class="box-title m-b-0">{{ __('weborder.payment_methods') }} </h3>
|
||||
<hr>
|
||||
|
||||
<p>{{ __('weborder.payment_methods_intro') }}</p>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-4 col-sm-3 col-md-2">
|
||||
<img class="img-responsive" src="/images/payments-assets/paypal.png" alt="">
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-9 col-md-10">
|
||||
<h4 class="block bold size-18">{{ __('weborder.payment_method_paypal') }} </h4>
|
||||
<p>{{ __('weborder.payment_method_paypal_copy') }} </p>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
@include('web.layouts.includes.payment_logos', ['logoHeight' => 32, 'showAll' => true])
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-4 col-sm-3 col-md-2">
|
||||
<img class="img-responsive" src="/images/payments-assets/sofort.png" alt="">
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-9 col-md-10">
|
||||
<h4 class="block bold size-18">{{ __('weborder.payment_method_direct') }} </h4>
|
||||
<p>{{ __('weborder.payment_method_direct_copy') }} </p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-4 col-sm-3 col-md-2">
|
||||
<img class="img-responsive" src="/images/payments-assets/sepa.png" alt="">
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-9 col-md-10">
|
||||
<h4 class="block bold size-18">{{ __('weborder.payment_method_sepa') }} </h4>
|
||||
<p>{{ __('weborder.payment_method_sepa_copy') }} </p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-4 col-sm-3 col-md-2">
|
||||
<img class="img-responsive" src="/images/payments-assets/creditcard.png" alt="">
|
||||
<img src="/images/payments-assets/visa.svg" alt="Visa" title="Visa" style="height: 32px; width: auto; margin: 2px 3px 2px 0;">
|
||||
<img src="/images/payments-assets/mastercard.svg" alt="Mastercard" title="Mastercard" style="height: 32px; width: auto; margin: 2px 3px 2px 0;">
|
||||
<img src="/images/payments-assets/amex.svg" alt="American Express" title="American Express" style="height: 32px; width: auto; margin: 2px 3px 2px 0;">
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-9 col-md-10">
|
||||
<h4 class="block bold size-18">{{ __('weborder.payment_method_creditcard') }} </h4>
|
||||
|
|
@ -59,7 +32,117 @@
|
|||
|
||||
<div class="row">
|
||||
<div class="col-xs-4 col-sm-3 col-md-2">
|
||||
<img class="img-responsive" src="/images/payments-assets/vor.png" alt="">
|
||||
<img src="/images/payments-assets/paypal.svg" alt="PayPal" title="PayPal" style="height: 32px; width: auto;">
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-9 col-md-10">
|
||||
<h4 class="block bold size-18">{{ __('weborder.payment_method_paypal') }} </h4>
|
||||
<p>{{ __('weborder.payment_method_paypal_copy') }} </p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-4 col-sm-3 col-md-2">
|
||||
<img src="/images/payments-assets/applepay.svg" alt="Apple Pay" title="Apple Pay" style="height: 32px; width: auto;">
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-9 col-md-10">
|
||||
<h4 class="block bold size-18">{{ __('weborder.payment_method_applepay') }} </h4>
|
||||
<p>{{ __('weborder.payment_method_applepay_copy') }} </p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-4 col-sm-3 col-md-2">
|
||||
<img src="/images/payments-assets/googlepay.svg" alt="Google Pay" title="Google Pay" style="height: 32px; width: auto;">
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-9 col-md-10">
|
||||
<h4 class="block bold size-18">{{ __('weborder.payment_method_googlepay') }} </h4>
|
||||
<p>{{ __('weborder.payment_method_googlepay_copy') }} </p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-4 col-sm-3 col-md-2">
|
||||
<img src="/images/payments-assets/klarna.svg" alt="Klarna" title="Klarna" style="height: 32px; width: auto;">
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-9 col-md-10">
|
||||
<h4 class="block bold size-18">{{ __('weborder.payment_method_klarna') }} </h4>
|
||||
<p>{{ __('weborder.payment_method_klarna_copy') }} </p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-4 col-sm-3 col-md-2">
|
||||
<img src="/images/payments-assets/amazonpay.svg" alt="Amazon Pay" title="Amazon Pay" style="height: 32px; width: auto;">
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-9 col-md-10">
|
||||
<h4 class="block bold size-18">{{ __('weborder.payment_method_amazonpay') }} </h4>
|
||||
<p>{{ __('weborder.payment_method_amazonpay_copy') }} </p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-4 col-sm-3 col-md-2">
|
||||
<img src="/images/payments-assets/link.svg" alt="Link" title="Link" style="height: 32px; width: auto;">
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-9 col-md-10">
|
||||
<h4 class="block bold size-18">{{ __('weborder.payment_method_link') }} </h4>
|
||||
<p>{{ __('weborder.payment_method_link_copy') }} </p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-4 col-sm-3 col-md-2">
|
||||
<img src="/images/payments-assets/eps.svg" alt="EPS" title="EPS" style="height: 32px; width: auto;">
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-9 col-md-10">
|
||||
<h4 class="block bold size-18">{{ __('weborder.payment_method_eps') }} </h4>
|
||||
<p>{{ __('weborder.payment_method_eps_copy') }} </p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-4 col-sm-3 col-md-2">
|
||||
<img src="/images/payments-assets/bancontact.svg" alt="Bancontact" title="Bancontact" style="height: 32px; width: auto;">
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-9 col-md-10">
|
||||
<h4 class="block bold size-18">{{ __('weborder.payment_method_bancontact') }} </h4>
|
||||
<p>{{ __('weborder.payment_method_bancontact_copy') }} </p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-4 col-sm-3 col-md-2">
|
||||
@foreach (['blik' => 'BLIK', 'mbway' => 'MB WAY', 'pix' => 'Pix', 'satispay' => 'Satispay', 'samsungpay' => 'Samsung Pay', 'kakaopay' => 'Kakao Pay', 'naverpay' => 'Naver Pay', 'payco' => 'PAYCO'] as $moreLogoFile => $moreLogoLabel)
|
||||
<img src="/images/payments-assets/{{ $moreLogoFile }}.svg" alt="{{ $moreLogoLabel }}" title="{{ $moreLogoLabel }}" style="height: 24px; width: auto; margin: 2px 3px 2px 0;">
|
||||
@endforeach
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-9 col-md-10">
|
||||
<h4 class="block bold size-18">{{ __('weborder.payment_method_more') }} </h4>
|
||||
<p>{{ __('weborder.payment_method_more_copy') }} </p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-4 col-sm-3 col-md-2">
|
||||
<img src="/images/payments-assets/vorkasse.svg" alt="{{ __('weborder.payment_method_prepayment') }}" title="{{ __('weborder.payment_method_prepayment') }}" style="height: 32px; width: auto;">
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-9 col-md-10">
|
||||
<h4 class="block bold size-18">{{ __('weborder.payment_method_prepayment') }} </h4>
|
||||
|
|
|
|||
|
|
@ -159,27 +159,7 @@
|
|||
<div class="col-sm-1 col-md-2">
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-10 col-md-8 text-center">
|
||||
<div class="row">
|
||||
<div class="col-xs-2 col-sm-2 col-md-2">
|
||||
<img class="img-responsive" src="/images/payments-assets/paypal.png" alt="">
|
||||
</div>
|
||||
|
||||
<div class="col-xs-2 col-sm-2 col-md-2">
|
||||
<img class="img-responsive" src="/images/payments-assets/sofort.png" alt="">
|
||||
</div>
|
||||
|
||||
<div class="col-xs-2 col-sm-2 col-md-2">
|
||||
<img class="img-responsive" src="/images/payments-assets/sepa.png" alt="">
|
||||
</div>
|
||||
|
||||
<div class="col-xs-2 col-sm-2 col-md-2">
|
||||
<img class="img-responsive" src="/images/payments-assets/creditcard.png" alt="">
|
||||
</div>
|
||||
|
||||
<div class="col-xs-2 col-sm-2 col-md-2">
|
||||
<img class="img-responsive" src="/images/payments-assets/vor.png" alt="">
|
||||
</div>
|
||||
</div>
|
||||
@include('web.layouts.includes.payment_logos', ['logoHeight' => 28, 'wrapperClass' => 'text-center'])
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue