调至内容部分
创建账户
或
登录
Stripe 文档徽标
/
询问人工智能
创建账户
登录
开始
付款
销售收入
平台和交易市场
资金管理
开发人员资源
概览
关于 Stripe 支付
    概览
    收款
    货币
    拒付
    提现
    经常性付款
    3DS 验证
    退款并取消付款
    余额和结算时间
    收据
    处理 webhook 事件
    强客户认证准备
    Older API
升级您的集成
支付分析
线上付款
概览查找您的用例Use Managed Payments
使用 Payment Link
Use a prebuilt checkout page
Build a custom integration with Elements
构建应用内集成
支付方式
添加支付方式
管理支付方式
用 Link 更快结账
支付接口
Payment Links
结账
Web Elements
应用内支付
支付场景
处理多种货币
自定义支付流程
灵活收单
编排
线下支付
Terminal
超越支付功能
成立公司
加密货币
智能体商务 (Agentic Commerce)
Financial Connections
Climate
了解欺诈
Radar 欺诈保护
管理争议
验证身份
首页付款About Stripe payments

收款

安全地在线上收款。

制作支付表单或使用预构建的结账页面来开始接收线上付款。

用 Stripe Checkout 重定向到 Stripe 托管的支付页面。看看这个集成与 Stripe 的其他集成类型的对比情况。

Checkout 预览

集成难度

低代码

集成类型

重定向到 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'

将客户重定向到 Stripe Checkout
客户端
服务器端

在您的网站上添加一个结账按钮,调用一个服务器端点来创建 Checkout Session。

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

checkout.html
<html> <head> <title>Buy cool new product</title> </head> <body> <!-- Use action="/create-checkout-session.php" if your server is PHP based. --> <form action="/create-checkout-session" method="POST"> <button type="submit">Checkout</button> </form> </body> </html>

Checkout Session 是客户被重定向到支付表单时所看到的内容的程序化展示。可通过多种选项对它进行配置,例如:

  • 要扣款的 Line items
  • 可用货币

您必须在 success_url 填充您的网站上某个页面的 URL 值(Checkout 在客户完成付款后会将其返回到此页面)。还可以选择提供您网站上某个页面的 cancel_url 值(如果客户在完成前终止付款流程,Checkout 会将其返回到此页面)。

注意

Checkout Sessions 默认在创建后 24 小时后过期。

创建完 Checkout Session 后,将您的客户重定向到响应中返回的 URL。

Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
# This example sets up an endpoint using the Sinatra framework. 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', # These placeholder URLs will be replaced in a following step. success_url: 'https://example.com/success', cancel_url: 'https://example.com/cancel', }) redirect session.url, 303 end

支付方式

默认情况下,Stripe 支持银行卡及其他主流支付方式。您可以在 Stripe 管理平台中开启或关闭个别支付方式。在 Checkout 中,Stripe 评估货币和任何限制,然后动态向客户显示支持的支付方式。

要查看您如何向客户显示支付方式,请在管理平台中输入交易 ID 或设置订单金额和货币。

您可以在您的支付方式设置中启用 Apple Pay 和 Google Pay。默认情况下,Apple Pay 处于启用状态,Google Pay 处于禁用状态。但在某些情况下,即使已启用这些功能,Stripe 仍会将其过滤。如果您启用自动计税但未收集收货地址,我们将过滤 Google Pay。

Checkout 的 Stripe 托管页面不需要修改集成即可启用 Apple Pay 或 Google Pay。Stripe 处理这些付款的方式与处理其他银行卡付款的方式完全一样。

确认您的端点

启动您的网页服务器(例如 localhost:4242)并运行下列指令,以确认您的端点:

Command Line
curl -X POST -is "http://localhost:4242/create-checkout-session" -d ""

在您的终端应该会看到类似于下面的响应:

Command Line
HTTP/1.1 303 See Other Location: https://checkout.stripe.com/c/pay/cs_test_... ...

测试

现在,您的结账按钮应该可以使用了,能够将客户重定向到 Stripe Checkout。

  1. 点击结账按钮。
  2. 您会被重定向到 Stripe Checkout 支付表单。

如果您的集成不能用:

  1. 打开浏览器开发人员工具上的 Network 面板。
  2. 点击结账按钮,确认它向您的服务器端点 (POST /create-checkout-session) 发送了 XHR 请求。
  3. 验证该请求是否返回状态码 200。
  4. 用按钮点击监听器内的 console.log(session) 确认返回的数据是否正确。

显示成功页面
客户端
服务器端

客户成功提交支付表单息后,一定要能够看到成功页面,这一点非常重要。在您的网站上托管此成功页面。

创建一个最小的成功页面:

success.html
<html> <head><title>Thanks for your order!</title></head> <body> <h1>Thanks for your order!</h1> <p> We appreciate your business! If you have any questions, please email <a href="mailto:orders@example.com">orders@example.com</a>. </p> </body> </html>

接下来,更新 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 "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 \ --data-urlencode success_url="http://localhost:4242/success.html" \ --data-urlencode cancel_url="http://localhost:4242/cancel.html"

注意

如果要自定义您的成功页面,请阅读自定义成功页面指南。

测试

  1. 点击结账按钮。
  2. 用测试卡信息填写付款详情:
    • 输入 4242 4242 4242 4242 作为卡号。
    • 输入一个任意的未来日期作为有效期。
    • 输入 3 位数 CVC(银行卡安全码)。
    • 输入账单地址邮编。
  3. 点击支付。
  4. 系统会将您重定向到新的成功页面。

接下来,去 Stripe 管理平台找到新的付款。管理平台的付款列表中会显示成功的付款。点击某笔付款,会进入付款详情页面。Checkout 摘要部分包含账单信息和购买项目列表,可用于人工履行订单。

处理付款后事件

当客户完成 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 直接借记)付款失败时发送。通知客户支付失败并引导其返回会话重新尝试支付。

测试您的集成

要测试您的 Stripe 托管的支付表单集成:

  1. 创建一个 Checkout Session。
  2. 使用下表中的方法填写付款详情。
    • 输入一个任意的未来日期作为有效期。
    • 输入 3 位数 CVC(银行卡安全码)。
    • 输入账单地址邮编。
  3. 点击支付。您被重定向到您的 success_url。
  4. 前往管理平台,在付款页面上查找付款。如果您付款成功,就会在列表中看到它。
  5. 点击您的付款,查看更多详情,例如包含账单信息和已购商品列表的 Checkout 摘要。您可以此信息来履行订单。

了解有关测试您的集成的更多信息。

卡号场景如何测试
该卡付款成功,不需要验证。使用信用卡号以及有效期和 CVC 和邮编填写我们的信用卡表单。
该卡付款时需要验证。使用信用卡号以及有效期和 CVC 和邮编填写我们的信用卡表单。
该卡被拒绝,显示拒付代码,例如 insufficient_funds。使用信用卡号以及有效期和 CVC 和邮编填写我们的信用卡表单。
银联卡的长度为 13-19 位。使用信用卡号以及有效期和 CVC 和邮编填写我们的信用卡表单。

有关测试您的集成的更多信息,请参阅测试部分。

测试卡

卡号描述
成功并且立即处理付款。
完成 3DS 2.0 验证后才能成功付款。
始终会失败,显示拒付码 insufficient_funds。

可选创建产品和价格

让客户决定为什么付钱

您可以设置 Checkout Session 来收取小费和捐款,也可以出售产品和服务。

创建 Checkout Session 之前,您可以预先创建产品和价格。用“产品”表示不同的实物商品或服务等级,用“价格”表示每个产品的定价。

例如,您可以创建一个价格为 20 美元的 T 恤产品。这样即可在不更新相关产品详情的情况下更改和添加价格。使用 Stripe 管理平台或 API 均可创建产品和价格。详细了解产品和价格的运作原理。

API 仅要求有一个 name 即可创建 Product。Checkout 中显示您提供的产品的 name、description 和 images。

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/products \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d name=T-shirt

然后,创建一个 Price,定义产品的价格。这包括产品的费用及使用的币种。

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/prices \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d product=
{{PRODUCT_ID}}
\ -d unit_amount=2000 \ -d currency=usd

您创建的每个定价都有一个 ID。创建 Checkout Session 时,请引用定价 ID 和数量。若您需以多种货币销售商品,请将您的定价 (Price) 设置为 多币种 。Checkout 会自动确定客户的本地货币并在 Price 支持的情况下显示该货币。

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=payment \ -d "line_items[0][price]"={{PRICE_ID}} \ -d "line_items[0][quantity]"=1 \ --data-urlencode success_url="https://example.com/success?session_id={CHECKOUT_SESSION_ID}" \ --data-urlencode cancel_url="https://example.com/cancel"

可选预填充客户数据
服务器端

如果您已经收集了客户的邮件地址并且想在 Checkout Session 中给他们预先填写,则创建 Checkout Session 时传递 customer_email。

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
:"
\ --data-urlencode customer_email="customer@example.com" \ -d "line_items[0][price]"=
{{PRICE_ID}}
\ -d "line_items[0][quantity]"=1 \ -d mode=payment \ --data-urlencode success_url="https://example.com/success" \ --data-urlencode cancel_url="https://example.com/cancel"

可选保存支付方式详情
服务器端

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

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

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

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_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 \ --data-urlencode success_url="https://example.com/success.html" \ --data-urlencode cancel_url="https://example.com/cancel.html" \ -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
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_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 \ --data-urlencode success_url="https://example.com/success.html" \ --data-urlencode cancel_url="https://example.com/cancel.html" \ -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。

允许客户移除已保存的支付方式

要让客户移除已保存的支付方式,使其不会在将来的付款中再次出现,请在创建 Checkout Session 时使用 saved_payment_method_options.payment_method_remove。

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]"=2000 \ -d "line_items[0][quantity]"=1 \ -d mode=payment \ --data-urlencode success_url="https://example.com/success.html" \ --data-urlencode cancel_url="https://example.com/cancel.html" \ -d "saved_payment_method_options[payment_method_remove]"=enabled

如果支付方式关联到有效订阅,并且客户没有为账单和订阅付款保存默认支付方式,则客户不能删除该支付方式。

可选单独授权和捕获
服务器端

Stripe 支持银行卡两步验证付款,因此您可以先对银行卡进行授权,然后稍后再捕获。当 Stripe 授权付款时,发卡行为客户卡上的资金提供担保并冻结客户卡上的付款金额。然后您会有一定的时间来捕获资金,具体取决于银行卡)。如果您在授权过期之前不捕获付款,则付款会被取消,并且发卡行释放扣留的资金。

如果在确认客户能够支付与向其收款这两项操作之间还需要其他操作,则将授权与捕获分离开来是非常有帮助的。例如,如果您销售的产品库存有限,则需要确认客户用 Checkout 购买的商品仍然有货,然后才能捕获他们的付款并履行订单。通过以下流程实现:

  1. 确认 Stripe 已授权客户的支付方式。
  2. 查阅库存管理系统,确认那件商品是否有货。
  3. 更新您的库存管理系统,指示客户未购买那件商品。
  4. 捕获客户的付款。
  5. 在确认页面通知客户他们是否购买成功。

要表明您想单独授权和捕获,必须在创建 Checkout Session 时将 payment_intent_data.capture_method 的值设置为 manual。这样可指示 Stripe 仅授权客户银行卡上的金额。

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 "line_items[0][price]"={{PRICE_ID}} \ -d "line_items[0][quantity]"=1 \ -d mode=payment \ -d "payment_intent_data[capture_method]"=manual \ --data-urlencode success_url="https://example.com/success.html" \ --data-urlencode cancel_url="https://example.com/cancel.html"

要捕获一笔未捕获的付款,可以用管理平台,也可以用 capture 端点。程序化地捕获付款必须访问 Checkout Session 过程中创建的 PaymentIntent,它可从 Session 对象获取。

可选客户账户管理
无代码

通过向您的客户门户分享链接,让您的客户管理他们自己的账户。客户门户允许客户用他们的电子邮件地址登录,以管理订阅、更新支付方式等。

另见

  • 添加折扣
  • 收税
  • 收集税号
  • 添加收货地址
  • 自定义品牌
此页面的内容有帮助吗?
是否
  • 需要帮助?联系支持。
  • 加入我们的早期使用计划。
  • 查看我们的更改日志。
  • 有问题?联系销售。
  • LLM? Read llms.txt.
  • Powered by Markdoc
Code quickstart
相关指南
Elements Appearance API
更多支付场景
卡的工作原理