强客户身份验证失败时该怎么办?

时间:2019-06-29 09:48:35

标签: stripe-payments

我正在尝试通过 Stripe.js V3 严格的客户身份验证(SCA)来实现Subscription signup and payment flow

var stripe = Stripe('pk_test_9hA8gecxBFTY3O6kUm7hl16j');

var paymentIntentSecret = 'pi_91_secret_W9';

stripe.handleCardPayment(
    paymentIntentSecret
).then(function (result) {
    if (result.error) {
        // Display error.message in your UI.
    } else {
        // The payment has succeeded. Display a success message.
    }
})

付款成功时,一切都很好。

但是失败时我应该怎么办?

我应该将用户重定向到初始付款屏幕,以便他/他可以重新开始吗?

这样做时,我会收到此错误:

  

您无法确认此PaymentIntent,因为它的状态为已取消。只能确认具有以下状态之一的PaymentIntent:requires_confirmation,requires_action。

还是应该删除所有内容,包括以前创建的stripe_customerstripe_subscription,然后重新开始?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果付款完全失败(可能是被拒绝,或者尝试了3D Secure,但未成功完成),则第一张发票的PaymentIntent应该处于requires_payment_method状态,订阅为incomplete

您可以选择尝试从用户那里收集新的付款信息,并使用该信息来完成发票付款并激活订阅。您可以在此期间重复使用相同的PaymentIntent,然后尝试多次。例如,如果您有一个带有“卡片元素”的付款表单来收集详细信息,则可以让用户输入一张新卡片并再次致电:

stripe.handleCardPayment(cardElement,
    paymentIntentSecret
).then(function(res){...})

或者,您可以选择完全取消订阅。否则,如果您什么都不做,或者客户无法提供有效的付款方式,则24小时后,Stripe会有效地取消您的订阅。

您的错误消息似乎表明PaymentIntent已被取消,这可能意味着您已取消订阅,或者您在首次付款后的24小时内尝试此操作,我不确定。

此链接会更详细: https://stripe.com/docs/billing/lifecycle#incomplete