迁移您的基础银行卡集成
迁移到一个可处理银行的银行卡验证要求的集成。
If you followed the Card payments without bank authentication guide, your integration creates payments that decline when a bank asks the customer to authenticate the purchase.
如果您开始看到大量失败的付款,如下面管理平台中这样的付款或 API 中显示有错误代码 requires_
的付款,则请升级您的基本集成,以处理而非拒绝这些付款。
使用本指南,了解如何升级您通过上一指南构建的集成,以添加服务器和客户端代码,通过显示一个模态提示客户验证付款。
备注
前往 GitHub 查看该集成的完整示例。
检查付款是否需要验证服务器端
对您的服务器创建 PaymentIntent 的端点进行两项更改:
- 删除 error_on_requires_action 参数,不再对需要验证的付款作失败处理。此时,PaymentIntent 状态会变为
requires_
。action - 添加
confirmation_
参数,以表示您要在处理完验证请求后在服务器上再次明确(手动)确认付款。method
然后更新您的“生成响应”函数,使其处理 requires_
状态,而不非显示错误:
让客户验证客户端
然后,如果客户需要验证,则更新客户端代码,通知 Stripe 显示模态。
当 PaymentIntent 状态为 requires_
时,使用 stripe.handleCardAction。如果成功,则 PaymentIntent 状态变为 requires_
,这时需要在您的服务器再次确认 PaymentIntent 来完成付款。
const handleServerResponse = async (responseJson) => { if (responseJson.error) { // Show error from server on payment form } else if (responseJson.requiresAction) { // Use Stripe.js to handle the required card action const { error: errorAction, paymentIntent } = await stripe.handleCardAction(responseJson.clientSecret); if (errorAction) { // Show error from Stripe.js in payment form } else { // The card action has been handled // The PaymentIntent can be confirmed again on the server const serverResponse = await fetch('/pay', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ payment_intent_id: paymentIntent.id }) }); handleServerResponse(await serverResponse.json()); } } else { // Show success message } }
再次确认 PaymentIntent服务器端
使用您之前设置的同一个端点再次确认 PaymentIntent 以完成付款,并履行订单。如果未在一小时内再次确认,则付款尝试将失败并回到 requires_
。
测试集成应用
在测试模式下,用我们的测试卡验证您的集成是否已正确更新。Stripe 在测试模式的模态中显示一个假的身份验证页面,供您模拟成功或失败的验证尝试。在真实模式下,银行会控制模态内显示的 UI。
卡号 | 描述 |
---|---|
成功并且立即处理付款。 | |
始终会失败,显示拒付码 insufficient_ 。 | |
要求验证,此集成中会失败,显示拒付代码 authentication_ 。 |