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

Stripe payments 当强客户身份验证失败时该怎么办?,stripe-payments,Stripe Payments,我正在尝试使用Stripe.js V3和强大的客户身份验证SCA实现一个新的应用程序,如下所示: var stripe = Stripe('pk_test_9hA8gecxBFTY3O6kUm7hl16j'); var paymentIntentSecret = 'pi_91_secret_W9'; stripe.handleCardPayment( paymentIntentSecret ).then(function (result) { if (result.error

我正在尝试使用Stripe.js V3和强大的客户身份验证SCA实现一个新的应用程序,如下所示:

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:需要确认,需要操作

或者我应该删除所有内容,包括以前创建的stripe_客户和stripe_订阅,然后重新开始吗


感谢您的帮助。

如果付款完全失败,可能是因为付款被拒绝,或者尝试了3D Secure但未成功完成,则第一张发票中的PaymentIntent应处于requires\u payment\u method状态,并且订阅不完整

您可以选择尝试从用户收集新的付款信息,并使用该信息完成发票付款和激活订阅。您可以在整个过程中重复使用相同的PaymentIntent,并根据需要尝试多次。例如,如果您有一张带有用于收集详细信息的卡元素的付款单,则可以让用户输入一张新卡,然后再次调用:

stripe.handleCardPayment(cardElement,
    paymentIntentSecret
).then(function(res){...})
或者,如果愿意,您可以选择完全取消订阅。否则,如果您什么也不做,或者客户无法提供有效的付款方式,则Stripe会在24小时后为您取消订阅

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

此链接将详细介绍:

大多数人会显示类似“显示付款失败”的内容,请验证输入并重定向到输入表单。但是你当然可以开枪打死他们,为什么不呢。最糟糕的事情是一个愤怒的顾客再也不回来了。事务通常不会无缘无故地失败。@Damon:好的,但此时输入已经由Stripe完成并处理。那么如何在这里验证输入呢?不需要验证。您不需要,事实上也不应该验证它,除了完全明显的错误,例如空字段。交易成功或失败不是你的问题!。你所做的只是提供一个表格和一个网站,上面写着成功或失败。如果您在服务器上验证后认为它是好的,但交易失败,它仍然失败,那么您将无法看到钱。只有黑色和白色,没有灰色。