接受银行转账
用 Payment Intents API 接受银行转账付款。
当您第一次接受客户的银行转账付款时,Stripe 会为他们生成一个虚拟银行账户,然后您可以直接分享给他们。今后来自该客户的所有银行转账付款都会发到此银行账户。在一些国家,Stripe 还为您提供一个独特的转账参考码,您的客户每次转账时都需包含此号码,以更方便地进行对账。在某些国家,可以免费创建的虚拟银行账号数量是有限制的。
下图概括介绍了接受银行转账付款时的常用步骤:
处理少付和多付
使用银行转账方式付款,客户给您发送的可能会多于或少于预期金额。如果客户少发,则 Stripe 会向未付的付款意图中注入部分资金。账单是不能部分支付的,仍会保持开启状态,直到全额资金流入。
如果客户发送的金额超过预期,则 Stripe 会根据未付的付款核对入账资金,并将多出的金额保留在客户的现金余额中。年您可以在我们文档的对账部分找到有关 Stripe 如何处理对账的更多信息。
多个开启付款或账单的处理
您可能有多个开启的付款或账单,可通过银行转账来支付。在默认设置中,Stripe 会尝试用诸如转账的参考码或转账金额来自动对账银行转账。
您可以禁用自动对账,然后自行手动对账付款和账单。可单独覆盖掉对某个客户的自动对账行为,方法是将对账模式设置为手动模式。
创建或检索 Customer服务器端
要核对每笔银行转账付款,您必须关联一个 Customer 对象。如果您有现成的 Customer 对象,则可以跳过这一步。否则,创建一个新的 Customer 对象。
创建 PaymentIntent服务器端
PaymentIntent 是一个用来表示您从客户收款意图的对象,并可用于跟踪整个付款流程中各个阶段的情况。在服务器上创建一个 PaymentIntent,指定想要收取的金额和货币。您还必须填充 PaymentIntent 创建请求的 customer parameter。没有客户时,不能在 PaymentIntent 上使用银行转账。
收集付款详情客户端
用 Payment Element 在客户端收集支付信息。Payment Element 是一个预构建的 UI 组件,它简化了多种支付方式的收集支付详情的流程。
Payment Element 中包含一个 iframe,它通过一个 HTTPS 连接安全地将支付信息发送到 Stripe。避免将 Payment Element 放在另一个 iframe 中,因为有些支付方式需要重定向到另一个页面进行付款确认。
结账页面上的地址也必须以 https://
开头,不能是 http://
,否则您的集成不能工作。您可以在不使用 HTTPS 的情况下测试您的集成,准备好进行真实收款时将它启用。
Payment Element 呈现一个动态表单,您的客户可在这里选择一个支付方式。对于每个支付方式,表单会自动请求客户填写必要的支付详情。
自定义外观
您可以自定义 Payment Element,使其匹配您网站的设计风格,方法是在创建 Elements
提供程序时向 options
传递外观对象。
收集地址
默认情况下,Payment Element 仅收集必要的账单地址信息。收集客户完整的账单地址(例如,计算数字商品和服务的税额)或收货地址时,使用 Address Element。
一经确认,Stripe 会自动打开一个模态,向客户显示银行转账的详情。
向 Stripe 提交付款客户端
使用 stripe.confirmPayment,用来自 Payment Element 的详情完成付款。为该函数提供一个 return_url,告诉 Stripe 在用户完成付款后将他们重定向到哪里。您的用户可能会先被重定向到一个中间站点,如银行授权页面,然后才被重定向到 return_
。付款成功时,银行卡付款将立即重定向到 return_
。
如果您不想在完成付款后对银行卡付款重定向,可以将重定向设置到 if_
。这样就会只重定向使用基于重定向的支付方式结账的客户。
确保 return_
对应于您网站上显示付款状态的一个页面。Stripe 将客户重定向到 return_
时,我们会提供以下 URL 查询参数。
参数 | 描述 |
---|---|
payment_ | PaymentIntent 的唯一标识符。 |
payment_ | PaymentIntent 对象的 client secret。 |
注意
如果您有可以用来跟踪客户浏览器会话的工具,则您可能需要将 stripe.
域名添加到推荐人列表。重定向会导致一些工具创建新的会话,从而阻止您跟踪完整的会话。
用以下某个查询参数检索 PaymentIntent。检查 PaymentIntent 的状态,以决定向客户显示的内容。您还可以在提供 return_
时附加自己的查询参数,它们会在重定向过程中持续存在。
确认 PaymentIntent 成功
PaymentIntent 保持在 requires_
状态,直至资金到达银行账户。资金就位后,PaymentIntent 的状态从 requires_
更新为 succeeded
。
需设置您的 webhook 端点后才能开始接收 payment_
事件。当给 PaymentIntent 部分资金后,状态仍会是 requires_
。
您可以从管理平台添加 webhook。
或者,您可以用 Webhook Endpoints API 开始接收 payment_intent.partially_funded 事件。
注意
Stripe CLI 不支持触发 Beta API 版本的事件,例如 payment_
。
PaymentIntent 被更新时,付款的充值流程中会发送以下事件:
活动 | 描述 | 后续步骤 |
---|---|---|
payment_ | 客户余额资金不足,不能补齐 PaymentIntent 时,在确认过程中发送,PaymentIntent 变为 requires_ 。 | 引导客户发送一笔金额为 amount_ 的银行转账。 |
payment_ | 客户发送了银行转账,并且应用到了 PaymentIntent,但不足以完成付款。客户转账金额不足(由于错误地少付或其银行从中扣留了费用)或剩余的客户余额已应用到此 PaymentIntent 时就可能发生这种情况。部分注入资金的 PaymentIntents 不会提现在您的账户余额上,直至付款完成。 | 引导您的客户用一个新的 amount_ 再发送一笔银行转账,从而完成付款。如果想通过部分应用资金来完成付款,可以更新 amount 并再次 confirm PaymentIntent。 |
payment_ | 客户付款成功。 | 履行客户购买的商品或服务。 |
注意
当您更改有部分资金的 PaymentIntent 的金额时,资金将返回到客户余额。如果有其他未完成的 PaymentIntents,则 Stripe 自动提供这些资金。如果客户配置的是手动对账,那么您需要再次 apply the funds。
建议用 Webhook 来确认成功收款操作,并通知客户付款已完成。
示例代码
在管理平台查看待处理的付款
您可以通过将等待资金筛选器应用到状态来在管理平台中查看所有待处理的银行转账 PaymentIntents。
测试您的集成
可以通过用 API、管理平台或一个 Stripe CLI 的 Beta 版本号模拟一笔传入银行转账来测试您的集成。
处理临时性的可用性问题
以下错误代码表明支付方式的可用性出现了临时性的问题:
代码 | 描述 | 处理 |
---|---|---|
payment_ | 该支付方式的连续请求太多,其限制比 API 范围的速率限制更严格。 | 当您的许多客户在同一时段试图使用相同的支付方式时(例如,您的网站进行持续销售期间),多个 API 请求可能会持续发生这些错误。这种情况下,请让您的客户选择另外的支付方式。 |
注意
如果您预计一般情况下会用量激增或有即将要举行的大型活动,请在知道后立即联系我们。