收款
安全地在线上收款。
制作支付表单或使用预构建的结账页面来开始接收线上付款。
使用 Stripe Checkout 在您的网站上嵌入预构建的支付表单。看看这个集成与 Stripe 的其他集成类型的对比情况。




使用 Stripe 管理平台中的品牌设置匹配 Checkout 与您的网站设计。
首先,注册一个 Stripe 账户。
用我们的官方库从您的应用程序访问 Stripe API:
创建一个 Checkout Session服务器端
从您的服务器创建一个 Checkout Session,并将 ui_mode 设置为 embedded
。您可以使用 line items 配置 Checkout Session,以包括诸如 currency 之类的选项。
您还可以为现有客户创建 Checkout Session,从而用已知联系信息预填 Checkout 字段,并统一该客户的购买记录。
要让客户返回到您网站上托管的自定义页面,请在 return_url 参数中指定该页面的 URL。在 URL 中包含 {CHECKOUT_
模板变量,以在返回页面上检索会话的状态。在重定向之前,Checkout 会自动将变量替换为 Checkout Session ID。
创建 Checkout Session 后,使用挂载 Checkout 响应中返回的 client_
。
挂载 Checkout客户端
Checkout 在 iframe 中呈现,该 iframe 通过 HTTPS 连接将支付信息安全地发送给 Stripe。
常见错误
避免将 Checkout 放在另一个 iframe 中,因为有些支付方式需要重定向到另一个页面进行付款确认。
自定义外观
通过在您账户的品牌设置中设置背景颜色、按钮颜色、边框半径和字体,自定义 Checkout 以匹配您的网站设计。
默认情况下,Checkout 在呈现时没有外部填充或边距。我们建议使用一个容器元素,如 div,来应用您想要的边距(例如,所有边都是 16px)。
显示返回页面
在您的客户尝试付款后,Stripe 会将他们重定向到您网站上的返回页面。创建 Checkout Session 时,您在 return_url 参数中指定返回页面的 URL。阅读有关自定义重定向行为其他选项的更多信息。
在呈现您的返回页面时,使用 URL 中的 Checkout Session ID 来检索 Checkout Session 的状态。根据会话状态处理结果,如下所示:
complete
: 付款成功。使用来自 Checkout Session 的信息来呈现成功页面。open
: 付款失败或被取消。重新安装 Checkout,以便您的客户可以重试。
const session = await fetch(`/session_status?session_id=${session_id}`) if (session.status == 'open') { // Remount embedded Checkout } else if (session.status == 'complete') { // Show success page // Optionally use session.payment_status or session.customer_email // to customize the success page }
基于重定向的支付方式
在支付过程中,一些支付方式会将客户重定向到中间页面,如银行授权页面。当他们完成该页面时,Stripe 会将他们重定向到您的返回页面。
了解有关基于重定向的支付方式和重定向行为的更多信息。
处理付款后事件
当客户完成 Checkout Session 付款时,Stripe 会发送一个 checkout.session.completed 事件。使用管理平台 Webhook 工具或按照 Webhook 指南接收和处理这些事件,这可能会触发您:
- 向客户发送订单确认邮件。
- 在数据库中记录销售情况。
- 启动配送流程。
请侦听这些事件而非等待客户被重定向回您的网站。仅依赖 Checkout 着陆页触发履约是不可靠的。设置您的集成来侦听异步事件,这样才能用单一集成接受不同类型的支付方式。
详情请参阅我们的 Checkout 履约指南。
使用 Checkout 收款时需处理以下事件:
活动 | 描述 | 行动 |
---|---|---|
checkout.session.completed | 当客户成功完成 Checkout Session 时发送。 | 向客户发送订单确认,并履行他们的订单。 |
checkout.session.async_payment_succeeded | 当使用延迟型支付方式(如 ACH 直接借记)付款成功时发送。 | 向客户发送订单确认,并履行他们的订单。 |
checkout.session.async_payment_failed | 当使用延迟型支付方式(如 ACH 直接借记)付款失败时发送。 | 通知客户支付失败并引导其返回会话重新尝试支付。 |
可选添加更多支付方式
默认情况下,Checkout 支持很多种支付方式。在启用并显示某些支付方式时,如 Apple Pay、Google Pay 和“先买后付”方式,您必须采取额外步骤。
Apple Pay 和 Google Pay
要接受来自 Apple Pay 和 Google Pay 的支付,您必须:
- 在您的支付方式设置中启用它们。Apple Pay 默认启用。
- 在 HTTPS 的开发和生产环境中为您的应用服务。
- 注册您的域名。
- 在开发和生产环境中通过 HTTPS 向您的应用程序提供服务。您可以使用类似 ngrok 的服务在本地测试时向您的应用程序提供服务。
此外,仅当以下_所有_条件都满足时,Checkout Session 才会向客户显示 Apple Pay 按钮:
- 客户设备的操作系统是 17 或更高版本的 macOS 或 iOS。
- 客户使用的是 Safari 浏览器。
- 客户在 Apple Pay 中储存了有效的银行卡。
只有满足以下所有条件时,Checkout Session 才会向客户显示 Google Pay 按钮:
- 客户的设备正在运行 Chrome 61 或更高版本。
- 客户在 Google Pay 中储存了有效的银行卡。
区域测试印度
Stripe Checkout 不支持印度的 Stripe 账户或客户使用 Apple Pay 或 Google Pay。如果您的 IP 地址位于印度,即使 Stripe 账户在印度境外,也无法测试 Apple Pay 或 Google Pay 集成。
可选预填充客户数据服务器端
如果您已经收集了客户的邮件地址并且想在 Checkout Session 中给他们预先填充,则创建 Checkout Session 时传递 customer_email。
可选保存支付方式详情服务器端
默认情况下,用 Checkout 进行一次性付款时所使用的支付方式将来不能再使用。
保存支付方式,以在会话外扣款
通过传递 payment_intent_data.setup_future_usage 实参可以对 Checkout 进行设置,使其保存用于进行一次性付款的支付方式。在您需要捕捉填写的支付方式以便收取滞后费用时(例如取消或未到场费用),这样做非常有帮助。
如果您在 subscription
模式下使用 Checkout, Stripe 会自动保存该支付方式,用来完成今后的付款。使用 setup_
或 subscription
模式为客户保存的银行卡支付方式在复购时不会在 Checkout 中显示(详见下文)。建议使用自定义文本链接到有关使用保存的支付信息的任何相关条款。
注意
全球隐私法非常复杂、微妙。建议在实施 setup_future_usage 之前咨询您的法律和隐私团队,因为这可能会影响您的隐私合规框架。参考欧洲数据保护委员会发布的指导意见,了解有关保存支付详情的更多信息。
保存支付方式,以在 Checkout 中预先填充
默认情况下,Checkout 使用 Link 为您的客户提供安全地保存和重复使用其支付信息的选项。如果您更喜欢自己管理支付方式,请在创建 Checkout Session 时使用 saved_payment_method_options.payment_method_save,让客户保存他们的支付方式,以备将来购物时在 Checkout 中使用。
在 payment 或 subscription 模式下传递此参数会显示一个可选复选框,让客户显式保存其支付方式以备将来购买时使用。当客户选中此复选框时,Checkout 会使用 allow_redisplay: always 保存支付方式。Checkout 使用该参数来确定将来的购物中是否可以预先填充支付方式。使用 saved_
时,您无需传入 setup_
来保存支付方式。
使用 saved_payment_method_options.payment_method_save 时要求提供 Customer
。要保存新客户,请将 Checkout Session 的 customer_creation 设置为 always
。否则,会话过程中不会保存客户或支付方式。
如果未传入 payment_
或客户不同意保存支付方式,Checkout 仍会保存在 subscription
模式下或使用 setup_
创建的支付方式。这些支付方式的 allow_
值为 limited
,这可以防止在退货时预先填充它们,并使您遵守卡组织的规则和数据保护法规。了解如何更改这些模式启用的默认行为以及如何更改或覆盖 allow_
行为。
注意
您可以使用 Checkout 保存银行卡和其他支付方式来进行会话外收款,但 Checkout 仅预填充已保存的银行卡信息。了解如何预填充保存的银行卡信息。要在不进行初始付款的情况下保存支付方式,请在设置模式下使用 Checkout。
允许客户移除已保存的支付方式
要让客户移除已保存的支付方式,使其不会在将来的付款中再次出现,请在创建 Checkout Session 时使用 saved_payment_method_options.payment_method_remove。
如果支付方式关联到有效订阅,并且客户没有为账单和订阅付款保存默认支付方式,则客户不能删除该支付方式。
可选单独授权和捕获服务器端
Stripe 支持银行卡两步验证付款,因此您可以先对银行卡进行授权,然后稍后再捕获。当 Stripe 授权付款时,发卡行为客户卡上的资金提供担保并冻结客户卡上的付款金额。然后您会有一定的时间来捕获资金,具体取决于银行卡)。如果您在授权过期之前不捕获付款,则付款会被取消,并且发卡行释放扣留的资金。
如果在确认客户能够支付与向其收款这两项操作之间还需要其他操作,则将授权与捕获分离开来是非常有帮助的。例如,如果您销售的产品库存有限,则需要确认客户用 Checkout 购买的商品仍然有货,然后才能捕获他们的付款并履行订单。通过以下流程实现:
- 确认 Stripe 已授权客户的支付方式。
- 查阅库存管理系统,确认那件商品是否有货。
- 更新您的库存管理系统,指示客户未购买那件商品。
- 捕获客户的付款。
- 在确认页面通知客户他们是否购买成功。
要表明您想单独授权和捕获,必须在创建 Checkout Session 时将 payment_intent_data.capture_method 的值设置为 manual
。这样可指示 Stripe 仅授权客户银行卡上的金额。
要捕获一笔未捕获的付款,可以用管理平台,也可以用 capture 端点。程序化地捕获付款必须访问 Checkout Session 过程中创建的 PaymentIntent,它可从 Session 对象获取。