Мы работаем над тем, чтобы подготовить наш рабочий процесс Stripe Subscription к новым требованиям SCA к онлайн-платежам, вступающим в силу 14 сентября 2019 года. Мы сталкиваемся с некоторыми проблемами при попытке адаптировать Javascript и PHP-код для принятия 3D Secure. кредитные карты при создании подписок.
Мы уже попробовали то, что было указано здесь , но безуспешно. Мы отправляем enable_incomplete_payments = true
при создании подписки со стороны сервера, но ответ возвращает next_action = null
, хотя статус подписки pending
.
Это то, что мы делаем шаг за шагом:
(клиент) Запускаем элементы
let stripe = window.Stripe(key);
let elements = stripe.elements();
[...]
let card = elements.create('card', {style: style});
[...]
(клиент) мы используем тестовую карточку 4000000000003220
(3d обеспечено)
(клиент) createToken () -> отправить токен на сервер
createToken(formId).then((result)=>{
if (result.error) {
//handle errors
} else{
//send result.token to backend
}
})
(сервер) получить токен от клиента и создать клиента:
Customer::create([
"description" => $user->name,
"email" => $user->email,
"source" => $token, // obtained with Stripe.js
]);
(сервер) создать подписку
$response = Subscription::create([
"customer" => $customerId,
"items" => [
["plan" => $planId],
],
"prorate" => false,
"expand" => ["latest_invoice.payment_intent"],
'enable_incomplete_payments' => true
]);
if ($response->status == 'incomplete') {
$payment_intent = $response->latest_invoice->payment_intent->client_secret;
//send payment intent client secret to frontend to perform authorization
}
Здесь мы должны получить status=requires_action
в качестве ответа, но вместо этого мы получаем status=null
. И на следующем шаге:
stripe.handleCardPayment(paymentIntentSecret, element)
И здесь происходит сбой (никаких других действий или всплывающих окон) с ошибкой:
"error": {
"charge": "ch_1EhvwjBqa3pLeb3ypVgXafhI",
"code": "authentication_required",
"decline_code": "authentication_required",
"message": "Your card was declined. This transaction requires two-factor authentication.",
[...]
Спасибо,
Marco