调至内容部分
创建账户
或
登录
Stripe 文档徽标
/
询问人工智能
创建账户
登录
开始
付款
销售收入
平台和交易市场
资金管理
开发人员工具
概览
关于 Stripe 支付
升级您的集成
支付分析
线上付款
概览查找您的用例Managed Payments
使用 Payment Link
构建结账页面
    概览
    快速开始
    自定义外观样式
    收集额外信息
    收税
    动态更新结账流程
    管理产品目录
    订阅
    管理支付方式
    让客户用本地货币支付
    添加折扣、追加销售和可选商品
    设置未来付款
    支付过程中保存付款详情
      访客
    在您的服务器上手动批准支付
    付款后
    具有 Checkout Sessions API Beta 更改日志的 Element
    从传统 Checkout 迁移
    迁移 Checkout 来使用 Prices
构建高级集成
构建应用内集成
支付方式
添加支付方式
管理支付方式
用 Link 更快结账
支付接口
Payment Links
结账
Web Elements
应用内 Element
支付场景
自定义支付流程
灵活收单
编排
线下支付
Terminal
其他 Stripe 产品
Financial Connections
加密货币
Climate
首页付款Build a checkout page

支付过程中保存付款详情

了解如何接受付款并保存客户的付款详情以备将来购物时使用。

复制页面

用 Stripe Checkout 在您的网站上嵌入预构建的支付表单,让客户保存他们的支付信息,用于未来购物时使用。

设置 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'

创建客户
服务器端

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

Command Line
cURL
curl https://api.stripe.com/v1/customers \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d name="Jenny Rosen" \ --data-urlencode email="jennyrosen@example.com"

成功创建后会返回 Customer 对象。您可以检查客户 id 的对象,并将它的值存储在您的数据库中以供以后检索。

您可以在管理平台的客户页面中找到这些客户。

创建一个 Checkout Session
服务器端

从您的服务器创建一个 Checkout Session,并将 ui_mode 设置为 embedded。您可以使用 line items 配置 Checkout Session,以包括诸如 currency 之类的选项。

您还可以为现有客户创建 Checkout Session,从而用已知联系信息预填 Checkout 字段,并统一该客户的购买记录。

要让客户返回到您网站上托管的自定义页面,请在 return_url 参数中指定该页面的 URL。在 URL 中包含 {CHECKOUT_SESSION_ID} 模板变量,以在返回页面上检索会话的状态。在重定向之前,Checkout 会自动将变量替换为 Checkout Session ID。

阅读更多有关配置返回页面和其他自定义重定向行为的选项。

创建 Checkout Session 后,使用挂载 Checkout 响应中返回的 client_secret。

Ruby
# This example sets up an endpoint using the Sinatra framework. # To learn more about Sinatra, watch this video: https://youtu.be/8aA9Enb8NVc. require 'json' require 'sinatra' require 'stripe' # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys Stripe.api_key =
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
post '/create-checkout-session' do session = Stripe::Checkout::Session.create({ line_items: [{ price_data: { currency: 'usd', product_data: { name: 'T-shirt', }, unit_amount: 2000, }, quantity: 1, }], mode: 'payment', ui_mode: 'embedded', return_url: 'https://example.com/checkout/return?session_id={CHECKOUT_SESSION_ID}' }) {clientSecret: session.client_secret}.to_json end

挂载 Checkout
客户端
服务器端

Stripe.js 是作为 Checkout 的一部分提供的。在您的页面包含 Stripe.js 脚本,方法是将它添加到您的 HTML 文件的 head 部分。接下来,创建一个空的 DOM 节点(容器)用于挂载。

index.html
<head> <script src="https://js.stripe.com/v3/"></script> </head> <body> <div id="checkout"> <!-- Checkout will insert the payment form here --> </div> </body>

用您的可发布 API 密钥初始化 Stripe.js。

创建一个异步 fetchClientSecret 函数,请求您的服务器创建 Checkout Session 并检索客户端私钥。创建 Checkout 实例时,将该函数传入 options:

index.js
// Initialize Stripe.js const stripe = Stripe(
'pk_test_TYooMQauvdEDq54NiTphI7jx'
); initialize(); // Fetch Checkout Session and retrieve the client secret async function initialize() { const fetchClientSecret = async () => { const response = await fetch("/create-checkout-session", { method: "POST", }); const { clientSecret } = await response.json(); return clientSecret; }; // Initialize Checkout const checkout = await stripe.initEmbeddedCheckout({ fetchClientSecret, }); // Mount Checkout checkout.mount('#checkout'); }

Checkout 在 iframe 中呈现,该 iframe 通过 HTTPS 连接将支付信息安全地发送给 Stripe。

常见错误

避免将 Checkout 放在另一个 iframe 中,因为有些支付方式需要重定向到另一个页面进行付款确认。

保存支付方式
服务器端

设置完您的嵌入式 Checkout 集成应用后,为您的集成应用选择一个配置,以保存客户所用的支付方式。

默认情况下,用 Checkout 进行一次性付款时所使用的支付方式将来不能再使用。

保存支付方式,以在会话外扣款

通过传递 payment_intent_data.setup_future_usage 实参可以对 Checkout 进行设置,使其保存用于进行一次性付款的支付方式。在您需要捕捉填写的支付方式以便收取滞后费用时(例如取消或未到场费用),这样做非常有帮助。

Command Line
cURL
curl https://api.stripe.com/v1/checkout/sessions \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d customer_creation=always \ -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]"=2000 \ -d "line_items[0][quantity]"=1 \ -d mode=payment \ -d ui_mode=embedded \ --data-urlencode return_url="https://example.com/return" \ -d "payment_intent_data[setup_future_usage]"=off_session

如果您在 subscription 模式下使用 Checkout, Stripe 会自动保存该支付方式,用来完成今后的付款。使用 setup_future_usage 或 subscription 模式为客户保存的银行卡支付方式在复购时不会在 Checkout 中显示(详见下文)。建议使用自定义文本链接到有关使用保存的支付信息的任何相关条款。

注意

全球隐私法非常复杂、微妙。建议在实施 setup_future_usage 之前咨询您的法律和隐私团队,因为这可能会影响您的隐私合规框架。参考欧洲数据保护委员会发布的指导意见,了解有关保存支付详情的更多信息。

保存支付方式,以在 Checkout 中预先填充

默认情况下,Checkout 使用 Link 为您的客户提供安全地保存和重复使用其支付信息的选项。如果您更喜欢自己管理支付方式,请在创建 Checkout Session 时使用 saved_payment_method_options.payment_method_save,让客户保存他们的支付方式,以备将来购物时在 Checkout 中使用。

Command Line
cURL
curl https://api.stripe.com/v1/checkout/sessions \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d customer_creation=always \ -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]"=2000 \ -d "line_items[0][quantity]"=1 \ -d mode=payment \ -d ui_mode=embedded \ --data-urlencode return_url="https://example.com/return" \ -d "saved_payment_method_options[payment_method_save]"=enabled

在 payment 或 subscription 模式下传递此参数会显示一个可选复选框,让客户显式保存其支付方式以备将来购买时使用。当客户选中此复选框时,Checkout 会使用 allow_redisplay: always 保存支付方式。Checkout 使用该参数来确定将来的购物中是否可以预先填充支付方式。使用 saved_payment_method_options.payment_method_save 时,您无需传入 setup_future_usage 来保存支付方式。

使用 saved_payment_method_options.payment_method_save 时要求提供 Customer。要保存新客户,请将 Checkout Session 的 customer_creation 设置为 always。否则,会话过程中不会保存客户或支付方式。

如果未传入 payment_method_save 或客户不同意保存支付方式,Checkout 仍会保存在 subscription 模式下或使用 setup_future_usage 创建的支付方式。这些支付方式的 allow_redisplay 值为 limited,这可以防止在退货时预先填充它们,并使您遵守卡组织的规则和数据保护法规。了解如何更改这些模式启用的默认行为以及如何更改或覆盖 allow_redisplay 行为。

注意

您可以使用 Checkout 保存银行卡和其他支付方式来进行会话外收款,但 Checkout 仅预填充已保存的银行卡信息。了解如何预填充保存的银行卡信息。要在不进行初始付款的情况下保存支付方式,请在设置模式下使用 Checkout。

此页面的内容有帮助吗?
是否
需要帮助?联系支持。
加入我们的早期使用计划。
查看我们的更改日志。
有问题?联系销售。
LLM? Read llms.txt.
Powered by Markdoc