我正在尝试通过 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_customer
和stripe_subscription
,然后重新开始?
感谢您的帮助。
答案 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