调至内容部分
创建账户
或
登录
Stripe 文档徽标
/
询问人工智能
创建账户
登录
开始
付款
销售收入
平台和交易市场
资金管理
开发人员资源
概览
关于 Stripe 支付
升级您的集成
支付分析
线上付款
概览查找您的用例Use Managed Payments
使用 Payment Link
Use a prebuilt checkout page
Build a custom integration with Elements
    概览
    Compare Checkout Sessions and PaymentIntents
    Quickstart guides
    设计高级集成
    自定义外观样式
    管理支付方式
    收集额外信息
    构建订阅集成
    Dynamic updates
    添加折扣
    对您的付款征税
    兑换抵用金
    让客户用本地货币支付
    保存并检索客户支付方式
      保存支付时使用的支付方式
      不支付的情况下保存支付方式
    发送收据和已付账单
    在您的服务器上手动批准支付
    单独授权和捕获付款
    具有 Checkout Sessions API Beta 更改日志的 Element
构建应用内集成
支付方式
添加支付方式
管理支付方式
用 Link 更快结账
支付接口
Payment Links
结账
Web Elements
应用内支付
支付场景
处理多种货币
自定义支付流程
灵活收单
编排
线下支付
Terminal
超越支付功能
成立公司
加密货币
智能体商务 (Agentic Commerce)
Financial Connections
Climate
了解欺诈
Radar 欺诈保护
管理争议
验证身份
首页付款Build a custom integration with ElementsSave and retrieve customer payment methods

在不付款的情况下保存客户的支付方式

了解如何保存支付方式并稍后收款。

Checkout Sessions API 在设置模式下可让您保存客户的支付详情,而无需初始付款。如果您想现在吸纳客户,为他们设置付款流程,并在将来(客户离线时)使用 Payment Intents API 向他们收款,此功能会非常有用。

您可以使用此集成设置经常性付款或创建一次性付款,稍后再确定最终金额(通常在客户收到您的服务后)。

线下刷卡交易

线下刷卡交易,如通过 Stripe Terminal 收取银行卡信息,使用不同的流程来保存支付方式。

合规

在保存客户的支付详情时,您需要负责遵守所有适用的法律、法规和卡组织规则。如果您想要保存客户的支付方式以供将来使用,则通常会适用于这些要求,例如在结账流程中向他们显示客户的支付方式以供将来购物使用,或者在他们不主动使用您的网站或应用程序时向他们扣款。在您的网站或应用程序中添加条款,说明您计划如何保存支付方式的详细信息,并允许客户选择加入。

保存支付方式后,您只能将其用于条款中包含的特定用途。要在客户离线时对某种支付方式扣款并将其保存为可供未来购物时选择的选项,请务必收集客户对这一特定用途的明确同意。例如,包含“保存我的支付方式以供未来使用”复选框以收集客户同意。

要在客户离线时向客户收款,请确保您的条款包括以下内容:

  • 客户同意您代其对指定的交易发起一次或一系列付款。
  • 付款的预期时间和频率(例如,款项是用于定期分期付款、订阅付款,还是不定期充值)。
  • 如何确定付款金额。
  • 若该支付方式用于订阅服务,需包含您的取消政策。

请务必保留客户书面同意这些条款的记录。

注意

如果您需要使用服务器端手动确认,或者您的集成应用需要单独展示支付方式,请参阅我们的替代指南。

设置 Stripe
服务器端

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

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

Command Line
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
# Available as a gem sudo gem install stripe
Gemfile
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
# If you use bundler, you can add this line to your Gemfile gem 'stripe'

创建一个 Customer
服务器端

要为将来的付款设置支付方式,就必须将它绑定到 Customer。当客户在您的网站上创建账户时,创建 Customer 对象。Customer 对象允许重复使用支付方式并跟踪多笔付款。

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl -X POST https://api.stripe.com/v1/customers \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"

使用设置模式
服务器端

使用 mode=setup 创建 Checkout Session。

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/checkout/sessions \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d mode=setup \ -d ui_mode=custom \ -d currency=usd

将支付方式关联到客户账户
服务器端

如果您没有使用现有客户创建 Checkout Session,请使用PaymentMethod的 ID,将支付方式关联到客户账户。

否则,支付方式会自动关联到您在创建 Checkout Session 时提供的客户。

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/payment_methods/
{{PAYMENT_METHOD_ID}}
/attach
\ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d customer=
{{CUSTOMER_ID}}

检索支付方式
服务器端

客户成功完成 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 时立即进行确认。
Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/payment_intents \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d amount=1099 \ -d currency=usd \ -d customer=
{{CUSTOMER_ID}}
\ -d payment_method=
{{PAYMENT_METHOD_ID}}
\ -d off_session=true \ -d confirm=true

若支付尝试失败,请求也会失败并返回 402 HTTP 状态码,且 PaymentIntent 状态会变为 requires_payment_method。请通知客户返回您的应用程序(例如,通过发送电子邮件或应用内通知),并引导客户进入新的 Checkout Session 以选择其他支付方式。

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/checkout/sessions \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d customer=
{{CUSTOMER_ID}}
\ -d "line_items[0][price_data][currency]"=usd \ -d "line_items[0][price_data][product_data][name]"=T-shirt \ -d "line_items[0][price_data][unit_amount]"=1099 \ -d "line_items[0][quantity]"=1 \ -d mode=payment \ -d ui_mode=custom \ --data-urlencode return_url="https://example.com/return"
此页面的内容有帮助吗?
是否
  • 需要帮助?联系支持。
  • 加入我们的早期使用计划。
  • 查看我们的更改日志。
  • 有问题?联系销售。
  • LLM? Read llms.txt.
  • Powered by Markdoc