调至内容部分
创建账户
或
登录
Stripe 文档徽标
/
询问人工智能
创建账户
登录
开始
付款
销售收入
平台和交易市场
资金管理
开发人员工具
概览
关于 Stripe 支付
升级您的集成
支付分析
线上付款
概览查找您的用例Managed Payments
使用 Payment Link
构建结账页面
构建高级集成
构建应用内集成
支付方式
添加支付方式
管理支付方式
用 Link 更快结账
支付接口
Payment Links
结账
Web Elements
应用内 Element
支付场景
自定义支付流程
    概览
    现有客户付款
    单独授权和捕获付款
    构建两步确认体验
    收集支付详情后再创建 Intent
    在服务器上确认付款
    邮购和电话订购 (MOTO)
    美国和加拿大卡
      不验证即保存银行卡
      升级以处理验证
    将银行卡详情转发给第三方 API 端点
    付款行项目
灵活收单
编排
线下支付
Terminal
其他 Stripe 产品
Financial Connections
加密货币
Climate
首页付款Custom payment flowsUS and Canadian cards

迁移您的基础银行卡集成

迁移到一个可处理银行的银行卡验证要求的集成。

复制页面

如果您遵循了不进行银行验证的银行卡付款指南,那么您创建的付款在银行要求客户验证付款时会被拒绝。

如果您开始看到大量失败的付款,如下面管理平台中这样的付款或 API 中显示有错误代码 requires_action_not_handled 的付款,则请升级您的基本集成,以处理而非拒绝这些付款。

管理平台显示一笔付款失败,注明该银行要求对这笔付款进行验证。

使用本指南,了解如何升级您通过上一指南构建的集成,以添加服务器和客户端代码,通过显示一个模态提示客户验证付款。

注意

前往 GitHub 查看该集成的完整示例。

检查付款是否需要验证
服务器端

对您的服务器创建 PaymentIntent 的端点进行两项更改:

  1. 删除 error_on_requires_action 参数,不再对需要验证的付款作失败处理。此时,PaymentIntent 状态会变为 requires_action。
  2. 添加 confirmation_method 参数,以表示您要在处理完验证请求后在服务器上再次明确(手动)确认付款。
Command Line
curl
curl https://api.stripe.com/v1/payment_intents \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -d amount=1099 \ -d currency=usd \ -d payment_method_types[]=card \ -d confirm=true \ -d error_on_requires_action=true \ -d payment_method="{{PAYMENT_METHOD_ID}}" \ -d confirmation_method=manual

然后更新您的“生成响应”函数,使其处理 requires_action 状态,而不非显示错误:

Command Line
curl
# If the request succeeds, check the # PaymentIntent's `status` and handle # its `next_action`.

让客户验证
客户端

然后,如果客户需要验证,则更新客户端代码,通知 Stripe 显示模态。

当 PaymentIntent 状态为 requires_action 时,使用 stripe.handleCardAction。如果成功,则 PaymentIntent 状态变为 requires_confirmation,这时需要在您的服务器再次确认 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_payment_method。

Command Line
curl
curl https://api.stripe.com/v1/payment_intents/{{PAYMENT_INTENT_ID}}/confirm \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -X "POST"

测试集成

在沙盒中用我们的测试卡验证您的集成是否已正确更新。Stripe 在沙盒的模态中显示一个假的身份验证页面,供您模拟成功或失败的验证尝试。在真实模式下,银行会控制模态内显示的 UI。

卡号描述
成功并且立即处理付款。
始终会失败,显示拒付码 insufficient_funds。
要求验证,此集成中会失败,显示拒付代码 authentication_not_handled。
此页面的内容有帮助吗?
是否
需要帮助?联系支持。
加入我们的早期使用计划。
查看我们的更改日志。
有问题?联系销售。
LLM? Read llms.txt.
Powered by Markdoc