Подписка на полосу не завершена после проверки 3DS - PullRequest
0 голосов
/ 08 апреля 2020

Я не уверен, что понимаю этот «новый» поток Stripe SCA 3DS. После успешного завершения аутентификации 3DS, создания клиента, а затем подписки, подписка помечается как «неполная».

Это моя текущая реализация Javascript:

form.addEventListener('submit', function(event) {

    event.preventDefault();
    disableFormSubmit(true);

    stripe.confirmCardPayment($('input#client_secret').val(), {

        payment_method: {
            card: cardElement,
            billing_details: {
                name: $('input#first_name').val()+' '+$('input#last_name').val(),
                email: $('input#email').val(),
            }
        }

    }).then(function(result){

        console.log(result);

        if (result.error) {
            disableFormSubmit(false);
            showPaymentError(result.error.message);
        } else {
            if (result.paymentIntent.status === 'succeeded') {
                disableFormSubmit(true);
                $('input#payment_method').val(result.paymentIntent.payment_method);
                form.submit();
            }
        }

    });
});

confirmCardPayment уже позаботится о проверке, показывая мне это наложение, где я нажимаю «Полная аутентификация».

enter image description here

После этого клиент (и Способ оплаты) успешно создан, и подписка прикрепляется к клиенту. Но статус подписки теперь говорит «неполное» с «require_action». Теперь это то, что я не понимаю. Разве предыдущий оверлей не отвечает за это? В соответствии с документами (https://stripe.com/docs/billing/subscriptions/set-up-subscription#manage -sub-status ) мне следует снова позвонить confirmCardPayment, что я не понимаю, поскольку я только что это сделал, см. JS код.

enter image description here

Почему моя подписка все еще не завершена со статусом "require_action", хотя я буквально только что завершил этот шаг?

1 Ответ

0 голосов
/ 08 апреля 2020

часть руководства, которую вы просматриваете , посвящена обработке дополнительных действий по аутентификации и восстановлению после неудачных платежей. Вы должны предоставлять client_secret только в этот момент:

stripe.confirmCardPayment(client_secret)

В своем фрагменте кода вы снова предоставляете cardElement, когда он уже был предоставлен ранее :

stripe.createPaymentMethod({
  type: 'card',
  card: cardElement, // <-------
  billing_details: {
    email: 'jenny.rosen@example.com',
  },
})

Я подозреваю, что из-за этого происходит что-то неожиданное, поэтому настройте код так, чтобы он следовал ходу руководства, и он должен работать.

...