![](/img/trans.png)
[英]ERROR with Stripe Checkout: One-Time + Subscription Payment Buttons on the same page?
[英]Stripe Checkout Subscription Payment failure redirects to Expire Link Page
我正在尝试使用他们的Checkout API
集成 Stripe One time 和 Subscription Payment。
我还启用了 3D 安全支付。 在一次付款成功后,它会重定向到我们的成功页面。 当付款失败时,它会在结帐表单中显示错误消息。 正如预期的那样。
在结帐订阅中,当付款成功时,它会完美地重定向到成功页面。 对于失败的付款,它也会在 3D 身份验证后显示错误消息,但是当我尝试在尝试失败后使用另一张卡或同一张卡付款时,它会将我重定向到Expired link page
。
我检查了条纹演示结帐页面( https://checkout.stripe.dev/preview ),它工作正常,但不知道我错过了什么。
我从条带文档中了解到,对于失败的付款,我应该处理错误并告诉用户/重定向使用不同的付款方式。
我已经注册了以下 webhook 事件:
当invoice.payment_action_required
事件被触发时,我必须手动确认3D 安全认证的付款(订阅需要)。 我已经编写了以下代码来确认付款。
if (paymentIntent.status === 'requires_action') { await stripe.paymentIntents.confirm(payment_intent); }
这是创建订阅会话的代码片段:
const session = await stripePrivate.checkout.sessions.create({ mode: 'subscription', payment_method_types: ['card'], line_items: [ { price: planId, quantity: 1 } ], metadata: { transactionId }, subscription_data: { metadata: { transactionId } }, success_url: `${merchantCallbackURL}?sessionId={CHECKOUT_SESSION_ID}&status=success&orderId=${orderId}`, cancel_url: `${merchantCallbackURL}?sessionId={CHECKOUT_SESSION_ID}&status=canceled&orderId=${orderId}` }); const callbackUrl = session.url;
下面是页面,如果订阅付款失败(从第二次尝试开始),我将被重定向到:
在这里,我添加了一些结帐 URL 以进行测试:
测试卡1:4000008260003178(余额不足)
测试卡2:4000002500003155
以上网址将在 24 小时内过期。 请询问您是否需要另一个活动 url 进行测试。
如何测试?
Expired link page
我该如何解决这个问题? 我在这里缺少什么?
结帐页面是一次性的。 如果您使用一个来创建订阅,那么它将被“消耗”并且无法再次使用。
听起来您正在尝试处理创建订阅但由于付款处于requires_action
状态而导致未来发票付款失败的情况。 如果有问题的卡需要 3DS 并且必须由用户在客户端上确认,就会发生这种情况。 查看 PaymentIntents 流程: https ://stripe.com/docs/payments/intents
您不会重定向到同一个 Checkout 会话来操作处于requires_action
状态的卡片,而是可以构建自己的 UI 或使用客户门户: https : //stripe.com/docs/billing/subscriptions/customer-门户网站。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.