Я внедрил 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() }}">
Или, по крайней мере, если новые данные карты действительны, отметьте их как новый платеж по умолчаниюВ противном случае в следующий раз нам нужно будет выставить счет тому клиенту, который не будет использовать ту же карту.
Заранее спасибо!