Laravel收银员SCA

时间:2019-10-10 11:47:06

标签: laravel laravel-cashier

我已经按照Laravel收银员文档在订阅系统中实现了SCA,

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

因此,一旦我的用户输入了姓名和卡的详细信息,如果卡需要双重身份验证,则会弹出一个模式对话框,您必须完成双重身份验证,这会将您重定向到laravel收银员的付款。再次输入姓名和卡详细信息,但是这次用户可以输入其他卡详细信息,所以我的问题是

这种行为对吗?

是否仍然要检查卡是否不同并向客户端显示错误?我尝试过发送一个ajax呼叫来检查卡的详细信息,然后再发送至数据条,但是CSRF令牌不匹配,现在我正在测试,但是在payment.blade.php中,csrf meta为空,我还不知道为什么。 这是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) {
                    }
                });

但是,尽管我在application.blade.php的标头中加载了我的代码,但pay.blade中的csrf令牌为空

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

或者至少在新卡详细信息有效的情况下,将其标记为新的默认付款方式,否则,下一次我们必须向该客户付款时,我们将不会使用同一张卡。

谢谢!

0 个答案:

没有答案