Laravel касса SCA - PullRequest
       29

Laravel касса SCA

0 голосов
/ 10 октября 2019

Я внедрил SCA в своей системе подписки, следуя документации кассира Laravel,

try {
$subscription = $user->newSubscription('default', $planId)
                        ->create($paymentMethod);
} catch (IncompletePayment $exception) {
return redirect()->route(
    'cashier.payment',
    [$exception->payment->id, 'redirect' => route('home')]
);
}

, поэтому, как только мой пользователь введет свое имя и данные карты, если для карты требуется двойная аутентификация, появится модальное окно, и вынеобходимо выполнить двойную аутентификацию, которая перенаправит вас на payment.blade из кассы laravel, где пользователь должен снова ввести имя и данные карты, но на этот раз пользователь может ввести другие данные карты, поэтому мои вопросы:

Правильно ли это поведение?

Есть ли способ проверить, отличаются ли карточки, и показать ли клиенту ошибку? Я попытался сделать ajax-вызов, чтобы проверить данные карты перед отправкой в ​​полосу, но есть несоответствие токена CSRF, я сейчас тестирую, но в методу payment.blade.php csrf пусто, я пока не знаю, почему. это оригинальная функция подтверждения платежа в payment.blade

 confirmPayment: function () {
                var self = this;

                this.paymentProcessing = true;
                this.paymentProcessed = false;
                this.successMessage = '';
                this.errorMessage = '';

                stripe.handleCardPayment(
                    '{{ $payment->clientSecret() }}', this.cardElement, {
                        payment_method_data: {
                            billing_details: {name: this.name}
                        }
                    }
                ).then(function (result) {
                    self.paymentProcessing = false;

                    if (result.error) {
                        if (result.error.code === 'parameter_invalid_empty' &&
                            result.error.param === 'payment_method_data[billing_details][name]') {
                            self.errorMessage = '{{ __('Please provide your name.') }}';
                        } else {
                            self.errorMessage = result.error.message;
                        }
                    } else {
                        self.paymentProcessed = true;

                        self.successMessage = '{{ __('The payment was successful.') }}';
                    }
                });
            }

, поэтому я пытаюсь сделать перед вызовом handleCardPayment, make и ajax для проверки платежа следующим образом:

confirmPayment: function () {
                var self = this;

                $.ajax({
                    url: "{{ route('subscriptions.checkPaymentDetails') }}",
                    headers: {
                        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                    },
                    type: 'post',
                    dataType: "JSON",
                    data: {payment: "{{$payment->clientSecret()}}"},
                    success: function (data) {
                    },
                    error: function error(data) {
                    }
                });

но токен csrf пуст в файле payment.blade, хотя я загружаю его в заголовок application.blade.php

 <!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">

Или, по крайней мере, если новые данные карты действительны, отметьте их как новый платеж по умолчаниюВ противном случае в следующий раз нам нужно будет выставить счет тому клиенту, который не будет использовать ту же карту.

Заранее спасибо!

...