调至内容部分
创建账户
或
登录
Stripe 文档徽标
/
询问人工智能
创建账户
登录
开始
付款
销售收入
平台和交易市场
资金管理
开发人员工具
概览
关于 Stripe 支付
升级您的集成
支付分析
线上付款
概览查找您的用例Managed Payments
使用 Payment Link
构建结账页面
构建高级集成
构建应用内集成
支付方式
添加支付方式
管理支付方式
用 Link 更快结账
    概览
    Instant Bank Payments
    一览
    在 Checkout 中使用 Link
    Link 与 Web Element
    Link 与 Mobile Element
    Link 和 Invoicing 一起使用
    集成指南
    Link 支付集成
    构建包含 Link 的自定义结账页面
    使用 Element 和 Link 设置未来付款
支付接口
Payment Links
结账
Web Elements
应用内 Element
支付场景
自定义支付流程
灵活收单
编排
线下支付
Terminal
其他 Stripe 产品
Financial Connections
加密货币
Climate
首页付款Faster checkout with Link

构建包含 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,则建议您这样做。
在结账过程中直接在 Payment Element 中通过 Link 进行验证或注册

收集客户的电子邮件地址以进行 Link 验证或注册

设置 Stripe
服务器端

首先,创建 Stripe 账户或登录。

用我们的官方库从您的应用程序访问 Stripe API:

Command Line
Ruby
# Available as a gem sudo gem install stripe
Gemfile
Ruby
# If you use bundler, you can add this line to your Gemfile gem 'stripe'

创建 PaymentIntent
服务器端

Stripe 使用一个 PaymentIntent 对象来表示您向客户收款的意图,跟踪整个过程中的收费尝试和付款状态变化。

整个支付流程概览

如果您收集银行卡详情以使用 Setup Intents 供未来使用,请手动列出支付方式,而非使用动态支付方式。要在没有动态支付方式的情况下使用 Link,请更新您的集成,将 link 传递到 payment_method_types。

创建 PaymentIntent 时,使用动态支付方式动态为客户提供最相关的支付方式,包括 Link。要使用动态支付方式,不要包含 payment_method_types 参数。您也可以启用 automatic_payment_methods。

注意

当您的集成未设置 payment_method_types 参数时,某些支付方式会自动开启,包括银行卡和钱包。

要使用动态支付方式将 Link 添加到您的 Element 集成,请执行以下操作:

  1. 在您的管理平台的支付方式设置中,开启 Link。
  2. 如果您的现有集成可手动列出支付方式,请从您的集成中删除 payment_method_types参数。

检索客户端私钥

PaymentIntent 中包含的是一个客户端私钥,用于在客户端安全地完成支付流程。有不同的方法可以将客户端私钥传递到客户端。

使用浏览器的 fetch 功能,从您的服务器上的端点获取客户端私钥。如果您的客户端是单页应用,特别是用现代的前端框架(例如 React)搭建的情况,则该方法最为合适。创建服务于客户端私钥的服务器端点:

main.rb
Ruby
get '/secret' do intent = # ... Create or retrieve the PaymentIntent {client_secret: intent.client_secret}.to_json end

然后在客户端用 JavaScript 获取客户端私钥:

(async () => { const response = await fetch('/secret'); const {client_secret: clientSecret} = await response.json(); // Render the form using the clientSecret })();

收集客户电子邮件地址

Link 通过客户的电子邮件地址对其进行验证。根据您的结账流程,您有以下选项:将电子邮件传递给 Payment Element、直接在 Payment Element 中收集电子邮件,或使用 Link Authentication Element。在这些选项中,Stripe 建议在客户电子邮件地址可用时将其传递给 Payment Element。

如果您满足以下_任一_条件:

  • 您想要一个可收集邮件地址并进行 Link 身份验证的优化组件。
  • 您需要从客户那里收集收货地址。

然后使用实现以下元素的集成流程:Link Authentication Element、Payment Element 和可选的 Address Element。

启用了 Link 的结账页面的开头显示 Link Authentication Element,随后是 Address Element,最后是 Payment Element。对于多页结账流程,您也可以按此顺序在不同页面上显示 Link Authentication Element。

使用多个元素创建支付表单

使用多个元素创建支付表单

集成的工作方式如下:

设置您的支付表单
客户端

现在,您可以用 Elements 预构建的 UI 组件设置您的自定义支付表单了。支付页面上的地址也必须以 https:// 开头,不能是 http://,否则您的集成不能工作。您可以在不使用 HTTPS 的情况下测试您的集成。准备好进行真实收款时启用 HTTPS。

Link Authentication Element 会呈现一个电子邮件地址输入框。当 Link 将客户电子邮件与现有 Link 账户匹配时,它会向客户的手机发送安全的一次性代码以进行验证。如果客户成功通过验证,Stripe 会自动显示其 Link 保存的地址和支付方式供其使用。

此集成还会创建 Payment Element,后者会呈现一个动态表单,允许客户选择支付方式类型。该表单会自动收集客户所选支付方式类型的所有必要支付详细信息。Payment Element 还会为已通过验证的客户处理 Link 保存的支付方式的显示。

设置 Stripe Elements

从 npm 公共注册表安装 React Stripe.js 和 Stripe.js 加载器。

Command Line
npm install --save @stripe/react-stripe-js @stripe/stripe-js

在您的支付页面,用 Elements 组件包住您的支付表单,传递上一步中的 client secret。如果您已经在表单的另一部分收集了客户的邮件地址,请将您当前输入的内容替换为 linkAuthenticationElement​。

如果您不收集邮件地址,请将 linkAuthenticationElement​ 添加到您的结账流程中。必须将 linkAuthenticationElement 放在 ShippingAddressElement(如果您收集收货地址,则可选)和 Link 的 PaymentElement 之前,以便在 ShippingAddressElement 和 PaymentElement 中为您的客户自动填充 Link 中保存的详情。您还可以传入 appearance option,自定义 Elements,使其匹配您网站的设计。

如果您有客户的电子邮件,请将其传递给 linkAuthenticationElement 的 defaultValues 选项。这会预填其电子邮件地址并启动 Link 验证流程。

如果您有其他客户信息,请将其传递给 PaymentElement 的 defaultValues.billingDetails 对象。尽可能预填信息可简化客户的 Link 账户创建和重复使用。

然后,在支付表单中呈现 linkAuthenticationElement 和 PaymentElement 组件:

Checkout.jsx
import {loadStripe} from "@stripe/stripe-js"; import { Elements, LinkAuthenticationElement, PaymentElement, } from "@stripe/react-stripe-js"; const stripe = loadStripe(
'pk_test_TYooMQauvdEDq54NiTphI7jx'
); // Customize the appearance of Elements using the Appearance API. const appearance = {/* ... */}; // Enable the skeleton loader UI for the optimal loading experience. const loader = 'auto';

linkAuthenticationElement、PaymentElement 和 ShippingAddressElement 无需位于同一页面上。如果您有一个流程,其中客户联系信息、收货详细信息和支付详细信息在不同步骤中显示给客户,则您可以在相应的步骤或页面中显示每个元素。在联系信息收集步骤中,将 linkAuthenticationElement 作为电子邮件输入表单包含在内,以确保客户可以充分利用 Link 提供的收货和支付自动填充功能。

如果您在结账流程的早期收集了带有 Link Authentication Element 的客户电子邮件,则无需在收货或支付页面再次显示该电子邮件。

检索电子邮件地址

您可以使用 linkAuthenticationElement 组件上的 onChange 属性检索电子邮件地址详细信息。每当用户更新电子邮件字段或自动填充已保存的客户电子邮件时,onChange 处理程序就会触发。

<linkAuthenticationElement onChange={(event) => { setEmail(event.value.email); }} />

预填客户电子邮件地址

Link Authentication Element 接受电子邮件地址。一旦客户用 defaultValues 选项登录支付页面,提供客户的电子邮件地址将触发 Link 验证流程。

<linkAuthenticationElement options={{defaultValues: {email: 'foo@bar.com'}}}/>

可选预填其他客户数据
客户端

可选收集收货地址
客户端

可选自定义外观
客户端

向 Stripe 提交付款
客户端

用 stripe.confirmPayment 完成付款,使用从不同 Elements 表单收集的客户信息完成付款。为该函数提供一个 return_url,告诉 Stripe 在用户完成付款后将他们重定向到何处。

您的用户可能会先被重定向到一个中间站点,如银行授权页面,然后 Stripe 将其重定向到 return_url。

默认情况下,付款成功时,银行卡和银行付款将立即重定向到 return_url。如果不想重定向到 return_url,可以用 if_required 来更改行为。

Checkout.jsx
import {loadStripe} from "@stripe/stripe-js"; import { useStripe, useElements, Elements, LinkAuthenticationElement, PaymentElement, // If collecting shipping AddressElement, } from "@stripe/react-stripe-js"; const stripe = loadStripe(
'pk_test_TYooMQauvdEDq54NiTphI7jx'
); const appearance = {/* ... */}; // Enable the skeleton loader UI for the optimal loading experience. const loader = 'auto'; const CheckoutPage =({clientSecret}) => ( <Elements stripe={stripe} options={{clientSecret, appearance, loader}}> <CheckoutForm /> </Elements> ); export default function CheckoutForm() { const stripe = useStripe(); const elements = useElements(); const handleSubmit = async (event) => { event.preventDefault(); const {error} = await stripe.confirmPayment({ elements, confirmParams: { return_url: "https://example.com/order/123/complete", }, }); if (error) { // handle error } }; return ( <form onSubmit={handleSubmit}> <h3>Contact info</h3> <LinkAuthenticationElement /> {/* If collecting shipping */} <h3>Shipping</h3> <AddressElement options={{mode: 'shipping', allowedCountries: ['US']}} /> <h3>Payment</h3> <PaymentElement /> <button type="submit">Submit</button> </form> ); }

return_url 对应于您的网站上的一个页面,在您呈现返回页面时提供 PaymentIntent 的付款状态。当 Stripe 将客户重定向到 return_url 时,您可以使用以下 URL 查询参数来验证付款状态。您还可以在提供 return_url 时附上自己的查询参数。这些查询参数会在重定向过程中持续存在。

参数描述
payment_intentPaymentIntent 的唯一标识符
payment_intent_client_secretPaymentIntent 对象的 client secret。

可选分离授权和捕获
服务器端

处理支付后事件
服务器端

付款完成时,Stripe 会发送一个 payment_intent.succeeded 事件。用 Webhook 接收这些事件并运行操作,例如,向客户发送订单确认邮件、在数据库中记录订单,或启动配送流程。

配置您的集成来侦听这些事件,而不是等待来自客户端的回调。当您等待来自客户端的回调时,客户可能在回调执行之前关闭浏览器窗口或退出应用。通过设置您的集成来侦听异步事件,您就能够使用单一集成接受不同类型的支付方式。

除了处理 payment_intent.succeeded 事件外,您还可以在使用 Payment Element 收款时处理另外两个重要事件:

活动描述操作
payment_intent.succeeded在客户成功完成支付时从 Stripe 发送。向客户发送订单确认通知,并履行他们的订单。
payment_intent.payment_failed在客户尝试支付但支付未成功时从 Stripe 发送。如果一笔付款从 processing 变为 payment_failed,则让客户再尝试一次。

测试集成

注意

不要在沙盒 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 支付方式
服务器端
客户端

向您的客户披露 Stripe

Stripe 收集有关客户与 Elements 互动的信息,以向您提供服务、防范欺诈并改进其服务。这包括使用 Cookie 和 IP 地址来识别客户在单次结账会话中看到的 Elements。您有责任披露并获得 Stripe 以这些方式使用数据所需的所有权利和许可。有关更多信息,请访问我们的隐私中心。

另见

  • 什么是 Link
  • Link with Elements
  • Payment Element 中的 Link
  • 探索 Link Authentication Element
  • 不同支付集成中的 Link
此页面的内容有帮助吗?
是否
需要帮助?联系支持。
加入我们的早期使用计划。
查看我们的更改日志。
有问题?联系销售。
LLM? Read llms.txt.
Powered by Markdoc