我试图用订阅注册和支付流程实现一个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.
}
})
当支付取代的时候,一切都很好。
但是当失败时,我该怎么办?
我是否应该将用户重定向到初始支付屏幕,以便s/他可以重新开始?
当我这样做时,我会得到这样的错误:
无法确认此PaymentIntent,因为它的状态为“已取消”。只有具有下列状态之一的PaymentIntent才能得到确认: requires_confirmation,requires_action。
或者我应该删除所有内容,包括以前创建的stripe_customer
和stripe_subscription
,然后重新开始?
谢谢你的帮助。
发布于 2019-07-01 03:06:18
如果付款完全失败(可能是被拒绝了,或者3DSecure被尝试但没有成功完成),那么来自第一张发票的PaymentIntent应该处于requires_payment_method
状态,订阅是incomplete
。
您可以选择尝试从用户收集新的支付信息,并使用该信息完成发票支付并激活订阅。您可以在整个过程中重复使用相同的PaymentIntent,并尽可能多地尝试。例如,如果您有一个包含收集详细信息的Card元素的支付表单,您可以让用户输入一张新卡并再次调用它:
stripe.handleCardPayment(cardElement,
paymentIntentSecret
).then(function(res){...})
或者,如果您愿意,可以选择完全取消订阅。否则,如果您什么也不做,或者客户无法提供有效的支付方法,24小时后,Stripe实际上取消了您的订阅。
您的错误消息似乎表明PaymentIntent已被取消,这可能意味着您取消了订阅,或者您在初次付款超过24小时后尝试此操作,我不确定。
这个链接更详细:https://stripe.com/docs/billing/lifecycle#incomplete
https://stackoverflow.com/questions/56816563
复制相似问题