构建包含 Link 的自定义结账页面
用 Payment Element 或 Link Authentication Element 集成 Link。
本指南将引导您了解如何通过 Payment Intents API 和 Payment Element 或 Link Authentication Element 通过 Link 接受付款。
您可以通过三种方式针对 Link 验证和注册保护客户电子邮件地址:
- **传递电子邮件地址:**您可以使用 defaultValues 向 Payment Element 传递电子邮件地址。如果您已经在结账流程中收集了客户的邮件地址和/或电话号码,则我们建议采用这种方法。
- **收集电子邮件地址:**您可以直接在 Payment Element 中收集电子邮件地址。如果您在结账流程中的任何环节都未收集电子邮件地址,我们建议使用这种方法。
- **Link Authentication Element:**您可以用 Link Authentication Element 创建单个的邮件地址输入字段,以收集邮件地址并进行 Link 验证。如果您使用的是 Address Element,则建议您这样做。

收集客户的电子邮件地址以进行 Link 验证或注册
创建 PaymentIntent服务器端
Stripe 使用一个 PaymentIntent 对象来表示您向客户收款的意图,跟踪整个过程中的收费尝试和付款状态变化。
如果您收集银行卡详情以使用 Setup Intents 供未来使用,请手动列出支付方式,而非使用动态支付方式。要在没有动态支付方式的情况下使用 Link,请更新您的集成,将 link 传递到 payment_。
创建 PaymentIntent 时,使用动态支付方式动态为客户提供最相关的支付方式,包括 Link。要使用动态支付方式,不要包含 payment_ 参数。您也可以启用 automatic_。
注意
当您的集成未设置 payment_ 参数时,某些支付方式会自动开启,包括银行卡和钱包。
要使用动态支付方式将 Link 添加到您的 Element 集成,请执行以下操作:
- 在您的管理平台的支付方式设置中,开启 Link。
- 如果您的现有集成可手动列出支付方式,请从您的集成中删除 payment_method_types参数。
检索客户端私钥
PaymentIntent 中包含的是一个客户端私钥,用于在客户端安全地完成支付流程。有不同的方法可以将客户端私钥传递到客户端。
收集客户电子邮件地址
Link 通过客户的电子邮件地址对其进行验证。根据您的结账流程,您有以下选项:将电子邮件传递给 Payment Element、直接在 Payment Element 中收集电子邮件,或使用 Link Authentication Element。在这些选项中,Stripe 建议在客户电子邮件地址可用时将其传递给 Payment Element。
设置您的支付表单客户端
现在,您可以用 Elements 预构建的 UI 组件设置您的自定义支付表单了。支付页面上的地址也必须以 https:// 开头,不能是 http://,否则您的集成不能工作。您可以在不使用 HTTPS 的情况下测试您的集成。准备好进行真实收款时启用 HTTPS。
可选预填其他客户数据客户端
如果有的话,预填客户信息可以进一步简化结账流程并减少手动数据输入。
可选自定义外观客户端
将这些 Elements 添加到您的页面后,您可以自定义它们的 appearance,使其适合您设计的其余部分:

定制元素的外观
向 Stripe 提交付款客户端
用 stripe.confirmPayment 完成付款,使用从不同 Elements 表单收集的客户信息完成付款。为该函数提供一个 return_url,告诉 Stripe 在用户完成付款后将他们重定向到何处。
您的用户可能会先被重定向到一个中间站点,如银行授权页面,然后 Stripe 将其重定向到 return_。
默认情况下,付款成功时,银行卡和银行付款将立即重定向到 return_。如果不想重定向到 return_,可以用 if_required 来更改行为。
return_ 对应于您的网站上的一个页面,在您呈现返回页面时提供 PaymentIntent 的付款状态。当 Stripe 将客户重定向到 return_ 时,您可以使用以下 URL 查询参数来验证付款状态。您还可以在提供 return_ 时附上自己的查询参数。这些查询参数会在重定向过程中持续存在。
| 参数 | 描述 |
|---|---|
payment_ | PaymentIntent 的唯一标识符 |
payment_ | PaymentIntent 对象的 client secret。 |
可选分离授权和捕获服务器端
Link 支持单独授权和捕获。您必须在授权后的 7 天内捕获已授权的 Link 付款。否则,授权会被自动取消,您将无法捕获这笔付款。
告诉 Stripe 仅授权
要表明您想将单独授权和捕获,那么在创建 PaymentIntent 时将 capture_method 设置为 manual。该参数可指示 Stripe 仅授权客户支付方式卡上的金额。
捕获资金
授权成功后,PaymentIntent 的 status 变为 requires_。要捕获授权资金,请发出 PaymentIntent capture 请求。默认会捕获授权的总金额——不能超出,但可以少于这个金额。
Optional 取消授权
如果需要取消授权,您可以取消 PaymentIntent。
处理支付后事件服务器端
付款完成时,Stripe 会发送一个 payment_intent.succeeded 事件。用 Webhook 接收这些事件并运行操作,例如,向客户发送订单确认邮件、在数据库中记录订单,或启动配送流程。
配置您的集成来侦听这些事件,而不是等待来自客户端的回调。当您等待来自客户端的回调时,客户可能在回调执行之前关闭浏览器窗口或退出应用。通过设置您的集成来侦听异步事件,您就能够使用单一集成接受不同类型的支付方式。
除了处理 payment_ 事件外,您还可以在使用 Payment Element 收款时处理另外两个重要事件:
| 活动 | 描述 | 操作 |
|---|---|---|
| payment_intent.succeeded | 在客户成功完成支付时从 Stripe 发送。 | 向客户发送订单确认通知,并履行他们的订单。 |
| payment_intent.payment_failed | 在客户尝试支付但支付未成功时从 Stripe 发送。 | 如果一笔付款从 processing 变为 payment_,则让客户再尝试一次。 |
测试集成
注意
不要在沙盒 Link 账户中存储真实用户数据。将其视为可公开的数据,因为这些测试账户与您的公钥有关。
目前 Link 仅支持用信用卡、借记卡以及符合条件的美国银行账户进行购买。Link 需要域名注册。
您可以用任意有效的邮件地址为 Link 创建沙盒账户。下表显示的是 Stripe 接受的在验证沙盒账户时可使用的一次性固定密码值:
| 值 | 结果 |
|---|---|
| 非下方所列的任意 6 位数 | 成功 |
| 000001 | 错误,验证码无效 |
| 000002 | 错误,验证码已过期 |
| 000003 | 错误,超过了最大尝试次数 |
要测试具体的支付方式,请参考 Payment Element 测试示例。
多个资金来源
由于 Stripe 增加了额外的资金来源支持,因此您不需要更新您的集成。Stripe 会自动为它们提供与卡和银行账户支付相同的交易结算时间和担保。
卡验证和 3DS 验证
Link 支持对银行卡付款进行 3DS 2.0 验证。3DS2 要求客户在支付时,在发卡行那里完成额外的验证步骤。成功通过 3DS 验证的付款包含在责任转移范围内。
要在沙盒中用 Link 触发 3DS 2.0 验证流程,请使用以下测试卡(可输入任意的 CVC、邮编和未来的有效期):。
在沙盒环境中,身份验证过程显示一个模拟身份验证页面。在该页面,您可以授权或取消付款。授权付款 模拟的是身份验证成功的场景,并将您重定向到指定的返回 URL。点击失败按钮会模拟验证尝试不成功的场景。
有关更多详情,请参考 3DS 验证页面。
注意
测试 3DS 流程时,只有 3DS2 的测试卡才会在 Link 上触发验证。
可选显示客户保存的数据服务器端客户端
除了显示您为客户保存的地址和支付方式外,您还可以显示他们通过 Link 保存的数据。
如果某个客户有多种保存的支付方式,那么除了该客户在 Link 上保存的任何支付方式外,Stripe 还会显示保存到 客户 的三张最近使用的银行卡。

要实现这一点,请创建一个临时密钥并将其与 客户 ID 一起发送到您的前端。有关 customer 对象的信息是敏感信息,您不能在 Stripe.js 中直接检索它。Ephemeral Key 授予对 customer 数据的临时访问权限。
在客户端,用 clientSecret 获取 customerOptions。
(async () => { const response = await fetch('/secret'); const {clientSecret, customerOptions} = await response.json(); })
然后,将 customerOptions. 和 customerOptions. 的值传递到 Elements 组上的 customerOptions 选项。加载 Stripe 实例时,还必须传递 elements_ Beta 标志。
可选保存 Link 支付方式服务器端客户端
您可以保存 Link 支付方式用于未来的会话外支付或订阅,但不能用于未来的会话内支付。为此,您必须将其绑定到客户。当客户在您的公司创建账户时,创建 customer 对象。然后,在创建您的 PaymentIntent 时指定该 customer。
当新客户与您的公司进行第一笔交易时,在 Stripe 中创建一个 customer 对象来存储其数据以备将来使用。
在最新版本的 API 中,指定 automatic_ 参数是可选的,因为 Stripe 默认启用其功能。
准备好再次对您的客户收款时,使用 customer 和生成的 PaymentMethod ID 创建一个新的 PaymentIntent。将 off_session 设置为 true。如果在客户未主动使用您的网站或应用时需要验证,这会导致 PaymentIntent 发送错误。
向您的客户披露 Stripe
Stripe 收集有关客户与 Elements 互动的信息,以向您提供服务、防范欺诈并改进其服务。这包括使用 Cookie 和 IP 地址来识别客户在单次结账会话中看到的 Elements。您有责任披露并获得 Stripe 以这些方式使用数据所需的所有权利和许可。有关更多信息,请访问我们的隐私中心。

