diff --git a/app/PaymentDrivers/Stripe/CreditCard.php b/app/PaymentDrivers/Stripe/CreditCard.php index c575f7d03ebf..bf05b4ef12e2 100644 --- a/app/PaymentDrivers/Stripe/CreditCard.php +++ b/app/PaymentDrivers/Stripe/CreditCard.php @@ -66,13 +66,7 @@ class CreditCard 'description' => collect($data['invoices'])->pluck('id'), // TODO: More meaningful description. ]; - if ($data['token']) { - $payment_intent_data['payment_method'] = $data['token']->token; - } else { - $payment_intent_data['setup_future_usage'] = 'off_session'; - // $payment_intent_data['save_payment_method'] = true; - // $payment_intent_data['confirm'] = true; - } + $payment_intent_data['setup_future_usage'] = 'off_session'; $data['intent'] = $this->stripe->createPaymentIntent($payment_intent_data); $data['gateway'] = $this->stripe; diff --git a/public/js/clients/payments/stripe-credit-card.js b/public/js/clients/payments/stripe-credit-card.js index 61ff954d2283..c99cc4e7c8ba 100755 --- a/public/js/clients/payments/stripe-credit-card.js +++ b/public/js/clients/payments/stripe-credit-card.js @@ -1,2 +1,2 @@ /*! For license information please see stripe-credit-card.js.LICENSE.txt */ -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=11)}({11:function(e,t,n){e.exports=n("uALE")},uALE:function(e,t){var n,r,o,i;function a(e,t){for(var n=0;n { if (result.error) { @@ -71,7 +72,7 @@ class StripeCreditCard { this.stripe .handleCardPayment(this.secret, this.cardElement, { payment_method_data: { - billing_details: { name: cardHolderName.value }, + billing_details: {name: cardHolderName.value}, }, }) .then((result) => { @@ -126,7 +127,7 @@ class StripeCreditCard { this.stripe .handleCardSetup(this.secret, this.cardElement, { payment_method_data: { - billing_details: { name: cardHolderName.value }, + billing_details: {name: cardHolderName.value}, }, }) .then((result) => { @@ -158,23 +159,33 @@ class StripeCreditCard { return this.handleAuthorization(); }); } else { - if (this.token) { - document - .getElementById('pay-now-with-token') - .addEventListener('click', () => { + Array + .from(document.getElementsByClassName('toggle-payment-with-token')) + .forEach((element) => element.addEventListener('click', (element) => { + document.getElementById('stripe--payment-container').classList.add('hidden'); + document.querySelector('input[name=token]').value = element.target.dataset.token; + })); + + document + .getElementById('toggle-payment-with-credit-card') + .addEventListener('click', (element) => { + document.getElementById('stripe--payment-container').classList.remove('hidden'); + document.querySelector('input[name=token]').value = ""; + }); + + this.createElement().mountCardElement(); + + document + .getElementById('pay-now') + .addEventListener('click', () => { + let tokenInput = document.querySelector('input[name=token]'); + + if (tokenInput.value) { return this.completePaymentUsingToken(); - }); - } + } - if (!this.token) { - this.createElement().mountCardElement(); - - document - .getElementById('pay-now') - .addEventListener('click', () => { - return this.completePaymentWithoutToken(); - }); - } + return this.completePaymentWithoutToken(); + }); } } } @@ -182,12 +193,10 @@ class StripeCreditCard { const publishableKey = document.querySelector('meta[name="stripe-publishable-key"]').content ?? ''; -const token = document.querySelector('meta[name="stripe-token"]').content ?? ''; - const secret = document.querySelector('meta[name="stripe-secret"]').content ?? ''; const onlyAuthorization = document.querySelector('meta[name="only-authorization"]').content ?? ''; -new StripeCreditCard(publishableKey, token, secret, onlyAuthorization).handle(); +new StripeCreditCard(publishableKey, secret, onlyAuthorization).handle(); diff --git a/resources/views/portal/ninja2020/gateways/stripe/credit_card/pay.blade.php b/resources/views/portal/ninja2020/gateways/stripe/credit_card/pay.blade.php index 1aa55ed5d661..bf0a4181b4a7 100644 --- a/resources/views/portal/ninja2020/gateways/stripe/credit_card/pay.blade.php +++ b/resources/views/portal/ninja2020/gateways/stripe/credit_card/pay.blade.php @@ -3,7 +3,6 @@ @section('gateway_head') - @endsection @@ -16,6 +15,8 @@ + + @@ -26,16 +27,36 @@ @include('portal.ninja2020.gateways.includes.payment_details') - @if($token) - @include('portal.ninja2020.gateways.stripe.includes.pay_with_token') - @include('portal.ninja2020.gateways.includes.pay_now', ['id' => 'pay-now-with-token']) - @else - @include('portal.ninja2020.gateways.stripe.includes.card_widget') - @include('portal.ninja2020.gateways.includes.pay_now') - @endif + @component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.pay_with')]) + @if(count($tokens) > 0) + @foreach($tokens as $token) + + @endforeach + @endisset + + + @endcomponent + + @include('portal.ninja2020.gateways.stripe.includes.card_widget') + @include('portal.ninja2020.gateways.includes.pay_now') @endsection @section('gateway_footer') -@endsection \ No newline at end of file +@endsection diff --git a/resources/views/portal/ninja2020/gateways/stripe/includes/card_widget.blade.php b/resources/views/portal/ninja2020/gateways/stripe/includes/card_widget.blade.php index 5d8e554f5840..e5a9df327f3b 100644 --- a/resources/views/portal/ninja2020/gateways/stripe/includes/card_widget.blade.php +++ b/resources/views/portal/ninja2020/gateways/stripe/includes/card_widget.blade.php @@ -1,13 +1,15 @@ -@unless(isset($show_name) && $show_name == false) - @component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.name')]) - - @endcomponent -@endunless +
+ @unless(isset($show_name) && $show_name == false) + @component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.name')]) + + @endcomponent + @endunless -@unless(isset($show_card_element) && $show_card_element == false) - @component('portal.ninja2020.components.general.card-element-single') -
- @endcomponent -@endunless + @unless(isset($show_card_element) && $show_card_element == false) + @component('portal.ninja2020.components.general.card-element-single') +
+ @endcomponent + @endunless +
-@include('portal.ninja2020.gateways.includes.save_card') \ No newline at end of file +@include('portal.ninja2020.gateways.includes.save_card')