在不付款的情况下保存客户的支付方式
了解如何保存支付方式并稍后收款。
Checkout Sessions API 在设置
模式下可让您保存客户的支付详情,而无需初始付款。如果您想现在吸纳客户,为他们设置付款流程,并在将来(客户离线时)使用 Payment Intents API 向他们收款,此功能会非常有用。
您可以使用此集成设置经常性付款或创建一次性付款,稍后再确定最终金额(通常在客户收到您的服务后)。
线下刷卡交易
线下刷卡交易,如通过 Stripe Terminal 收取银行卡信息,使用不同的流程来保存支付方式。
合规
在保存客户的支付详情时,您需要负责遵守所有适用的法律、法规和卡组织规则。如果您想要保存客户的支付方式以供将来使用,则通常会适用于这些要求,例如在结账流程中向他们显示客户的支付方式以供将来购物使用,或者在他们不主动使用您的网站或应用程序时向他们扣款。在您的网站或应用程序中添加条款,说明您计划如何保存支付方式的详细信息,并允许客户选择加入。
保存支付方式后,您只能将其用于条款中包含的特定用途。要在客户离线时对某种支付方式扣款并将其保存为可供未来购物时选择的选项,请务必收集客户对这一特定用途的明确同意。例如,包含“保存我的支付方式以供未来使用”复选框以收集客户同意。
要在客户离线时向客户收款,请确保您的条款包括以下内容:
- 客户同意您代其对指定的交易发起一次或一系列付款。
- 付款的预期时间和频率(例如,款项是用于定期分期付款、订阅付款,还是不定期充值)。
- 如何确定付款金额。
- 若该支付方式用于订阅服务,需包含您的取消政策。
请务必保留客户书面同意这些条款的记录。
注意
如果您需要使用服务器端手动确认,或者您的集成应用需要单独展示支付方式,请参阅我们的替代指南。
创建一个 Customer服务器端
要为将来的付款设置支付方式,就必须将它绑定到 Customer。当客户在您的网站上创建账户时,创建 Customer
对象。Customer
对象允许重复使用支付方式并跟踪多笔付款。
使用设置模式服务器端
使用 mode=setup 创建 Checkout Session。
将支付方式关联到客户账户服务器端
如果您没有使用现有客户创建 Checkout Session,请使用PaymentMethod的 ID,将支付方式关联到客户账户。
否则,支付方式会自动关联到您在创建 Checkout Session 时提供的客户。
检索支付方式服务器端
客户成功完成 Checkout Session 后,处理 checkout.session.completed Webhook。在 Webhook 中检索 Session 对象,然后执行以下操作:
- 获取setup_intent 键的值,即 Checkout Session 期间创建的 SetupIntent ID。
- 使用 SetupIntent ID检索 SetupIntent 对象。返回的对象包含一个payment_method ID,您可以在下一步将其关联到客户账户。
了解有关设置 Webhook 的更多信息。
以后对保存的支付方式扣款服务器端
将 PaymentMethod 关联到客户账户后,您可以使用 PaymentIntent 进行 离线 付款:
- 将 customer 设置为客户 ID,将payment_method 设置为支付方式 ID。
- 将 off_session 设置为
true
,表示客户在尝试支付期间不在您的结账流程中,无法履行由合作伙伴(如发卡行、银行或其他支付机构)提出的身份验证请求。如果在您的结账流程中,合作伙伴请求身份验证,Stripe 会使用之前 会话内 交易中的客户信息请求豁免。如果不符合豁免条件,PaymentIntent 可能会导致错误。 - 将 PaymentIntent 的 confirm 属性值设置为
true
,这会导致在创建 PaymentIntent 时立即进行确认。
若支付尝试失败,请求也会失败并返回 402 HTTP 状态码,且 PaymentIntent 状态会变为 requires_payment_method。请通知客户返回您的应用程序(例如,通过发送电子邮件或应用内通知),并引导客户进入新的 Checkout Session 以选择其他支付方式。