Полосные подписки с 3d-картой безопасности и next_action null - PullRequest
2 голосов
/ 05 июня 2019

Мы работаем над тем, чтобы подготовить наш рабочий процесс 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

1 Ответ

0 голосов
/ 05 июня 2019

Это потому, что вы используете более старую версию API до того, как существовал неполный статус.Чтобы использовать этот поток, готовый к SCA, вы можете либо указать, передав "enable_incomplete_payments" => true при создании подписки, либо использовать https://stripe.com/docs/api/versioning для выполнения запросов API с использованием более новой версии API.Это подробно описано здесь:

https://stripe.com/docs/billing/lifecycle#incomplete-opt-in

...