履行订单
了解如何通过 Checkout Sessions API 履行收到的付款。
当您收到通过 Checkout Sessions API(包括 Payment Links)进行的付款时,您可能需要采取措施,将所支付的款项提供给您的客户。例如,您可能需要授予他们使用服务的权限,或者您可能需要向他们运送实物商品。这个过程称为履行,有两种方法可以处理这个过程:
- 手动进行:您可以使用 Stripe 提供给您的信息手动履行订单。例如,您可以监控管理平台,查看付款通知电子邮件,或者查看报告后再履行订单。
- 自动进行:您可以建立一个自动化履行系统。推荐
第一种方式适用于小批量或实验性业务,但在大多数情况下,我们建议自动履行。本指南的其余部分将向您展示如何构建自动履行系统。
自动履行
下面所列的自动履行系统结合使用 webhooks 和重定向到您的网站来触发履行。您必须使用 Webhook 来确保每笔付款都得到履行,重定向可让您的客户在付款后立即访问服务或履行详情。
创建履行功能服务器端
在您的服务器上创建一个功能来履行成功的付款。Webhook 会触发该函数,当客户在完成结账后被发送到您的网站时调用该函数。本指南将此函数称为 fulfill_
,但您可以根据需要命名函数。
您的 fulfill_
函数必须:
- 正确处理用同一 Checkout Session ID 被多次调用的操作。
- 接受 Checkout Session ID 作为参数。
- 使用 line_items 属性 expanded 从 API 中检索 Checkout Session。
- 检查 payment_status 属性,确定它是否需要履行。
- 执行行项目的履约。
- 记录所提供的 Checkout Session 的履约状态。
用下面的代码作为您的 fulfill_
函数的起点。TODO
注释表示您必须实现的任何功能。
注意
下面的代码片段可能会根据选择的语言将 fulfill_
函数命名为 fulfillCheckout
或 FulfillCheckout
,但它们都表示相同的函数。
注意
如果 Checkout Session 有很多行项目,则结合使用 API for Checkout line items 的 auto-pagination 来检索所有行项目。
根据您接受的支付方式和业务需求,您可能希望让您的 fulfill_
函数执行以下操作:
- 提供服务访问权限。
- 触发发货操作。
- 在自己的数据库中保存一份付款详情和行项目。
- 如果您没有启用 Stripe 的收据,则向客户发送自定义收据邮件。
- 如果您允许客户在 Checkout 中调整数量,则核对行项目和购买数量。
- 更新库存或库存记录。
创建支付事件处理程序服务器端
要触发履约操作,创建一个 Webhook 事件处理程序来侦听付款事件并触发您的 fulfill_
函数。
当有人向您付款时,它会创建一个 checkout.
事件。在您的服务器上设置一个端点来接受、处理和确认接收这些事件。
即时型支付方式与延迟型支付方式
某些支付方式不是即时型的,例如 ACH 直接借记和其他银行转账。这意味着,当结账完成时,资金不会立即到账。延迟型支付方式稍后付款成功时生成一个 checkout.session.async_payment_succeeded 事件。对象的状态为“处理中”,直至付款状态成功或失败。
注意
以下代码中显示的 Webhook 私钥 (whsec_
) 要么来自 Stripe CLI,要么来自您的 Webhook 端点。您可以用 Stripe CLI 进行本地测试,当处理程序在服务器上运行时,Stripe 会用 Webhook 端点向您的处理程序发送事件。更多详情见下一节。
您可能还想侦听和处理 checkout.
事件。例如,当延迟付款失败时,您可以向客户发送电子邮件。
在本地测试您的事件处理程序
开发并测试 Webhook 事件处理程序的最快方式是使用 Stripe CLI。如果您没有 Stripe CLI,请按照安装指南开始使用。
安装 Stripe CLI 后,您可以在本地测试您的事件处理程序。运行您的服务器(例如,在 localhost:4242
上),然后运行 stripe listen 命令,让 Stripe CLI 将事件转发到您的本地服务器:
stripe listen --forward-to localhost:4242/webhook Ready! Your webhook signing secret is 'whsec_<REDACTED>' (^C to quit)
将 Webhook 私钥 (whsec_
) 添加到您的事件处理代码中,然后以客户身份通过 Checkout 来测试履约情况:
- 按结账按钮,带您前往 Checkout,或访问您的 Payment Link
- 在 Checkout 中提供以下测试数据:
- 输入
4242 4242 4242 4242
作为卡号 - 输入一个任意的未来日期作为银行卡有效期
- 输入任意 3 位数作为 CVC
- 输入任意账单邮编 (
90210
)
- 输入
- 按下支付按钮
在付款完成后,请验证以下内容:
- 在运行
stripe listen
的命令行中,它会显示一个转发到您的本地服务器的checkout.
事件。session. completed - 您的服务器日志显示的是
fulfill_
函数的预期输出。checkout
创建 Webhook 端点
在本地测试后,在您的服务器上启动并运行您的 Webhook 事件处理程序。然后,创建一个 Webhook 端点,向您的服务器发送 checkout.
事件,然后再次测试结账流程。
配置登录页 URL推荐
将 Checkout 配置为在客户完成结账后将客户引导到您网站上的某个页面。在您的页面的 URL 中包含 {CHECKOUT_
占位符,当客户完成结账流程后,它会被替换为 Checkout Session ID。
在登录页上触发履行操作推荐
需要侦听 Webhooks以确保您始终触发每笔付款的履行操作,但 Webhook 有时会有延迟。要优化您的支付流程并保证在客户到场时能立即履行订单,也可从您的登录页面触发履行。
使用您在上一步中指定的 URL 中的 Checkout Session ID 执行以下操作:
- 当您的服务器收到 Checkout 登录页面的请求时,从 URL 中提取 Checkout Session ID。
- 使用提供的 ID 运行您的
fulfill_
函数。checkout - 在履行尝试完成后呈现页面。
呈现登录页时,可以显示以下内容:
- 履行过程详情。
- 关于客户现在可以访问的服务的链接或信息。
- 实物商品的运输或物流详情。
Webhook 为必填项
您不能仅依靠从 Checkout 登录页面触发履约操作,因为无法保证您的客户会访问该页面。例如,有人可以在 Checkout 中成功付款,但在您的登录页面加载之前会断开互联网连接。
设置 Webhook 事件处理程序,这样 Stripe 就可以直接向您的服务器发送支付事件,完全绕过客户端。Webhook 提供了确认您何时收款的最可靠方式。如果 Webhook 事件传送失败,Stripe 会重试多次。