跳转到主要内容

Quick Start Guide

Get your first checkout session running in under 5 minutes

API Reference & Live Testing

Explore the full API documentation and interactively test Checkout Session requests and responses.

Preview Checkout

Calculate pricing, taxes, and totals before creating a session.
Session Validity: Checkout sessions are valid for 24 hours by default. If you pass confirm=true in your request, the session will only be valid for 15 minutes.

Prerequisites

1

Dodo Payments Account

You’ll need an active Dodo Payments merchant account with API access.
2

API Credentials

Generate your API credentials from the Dodo Payments dashboard:
3

Products Setup

Create your products in the Dodo Payments dashboard before implementing checkout sessions.

Creating Your First Checkout Session

API Response

All methods above return the same response structure:
1

Get the checkout URL

Extract the checkout_url from the API response.
2

Redirect your customer

Direct your customer to the checkout URL to complete their purchase.
Alternative Integration Options: Instead of redirecting, you can embed the checkout directly in your page using Overlay Checkout (modal overlay) or Inline Checkout (fully embedded). Both options use the same checkout session URL.
3

Handle the return

After payment, customers are redirected to your return_url with query parameters including payment/subscription ID, status, customer email, and any license keys. See the return_url parameter docs for the full list.

Request Body

Required Fields

Essential fields needed for every checkout session

Optional Fields

Additional configuration to customize your checkout experience

Required Fields

product_cart
array
必填
Array of products to include in the checkout session. Each product must have a valid product_id from your Dodo Payments dashboard.
Mixed Checkout: You can combine one-time payment products and subscription products in the same checkout session. This enables powerful use cases like setup fees with subscriptions, hardware bundles with SaaS, and more.
查找您的产品 ID:您可以在您的 Dodo Payments 仪表板中进入产品 → 查看详情,或使用 列出产品 API找到产品 ID。

可选字段

配置这些字段以自定义结账体验,并将业务逻辑添加到您的支付流程中。
customer
object
客户信息。您可以通过他们的 ID 附加一个现有客户,或在结账期间创建一个新的客户记录。
使用客户的 ID 将现有客户附加到结账会话。
billing_address
object
准确计算税收、防欺诈和法规遵循的帐单地址信息。
confirm 设置为 true 时,所有帐单地址字段都将是会话成功创建所必需的。
allowed_payment_method_types
array
控制在结账时可用给客户的支付方式。这有助于优化特定市场或业务需求。可用选项credit, debit, upi_collect, apple_pay, google_pay, amazon_pay, klarna, affirm, afterpay_clearpay, cashapp, multibanco, bancontact_card, eps, ideal, przelewy24, paypal, sunbit
关键:始终包含 creditdebit 作为备用选项,以防首选支付方式不可用时防止结账失败。
示例
billing_currency
string
使用固定的计费货币覆盖默认的货币选择。使用 ISO 4217 货币代码。支持货币USDEURGBPCADAUDINR示例"USD" 表示美元,"EUR" 表示欧元
此字段仅在启用自适应定价时有效。如果禁用了自适应定价,则将使用产品的默认货币。
show_saved_payment_methods
boolean
默认值:"false"
显示返回客户之前保存的支付方式,以改善结账速度和用户体验。
return_url
string
付款完成后重定向客户的 URL。Dodo Payments 会在重定向时将以下查询参数附加到您的 URL:重定向 URL 示例:
使用 license_keyemail 查询参数,在返回页面上直接显示许可证密钥或立即发送确认,而无需额外的 API 调用。
cancel_url
string
客户点击返回按钮或取消结账会话时的重定向 URL。如果未提供,则不显示返回按钮。
设置 cancel_url,给客户一个清晰的方式返回您的网站而无需完成购买。这改善了结账体验,减少了摩擦。
confirm
boolean
默认值:"false"
如果为 true,则立即确定所有会话详情。如果需要的数据缺失,API 将抛出错误。
discount_codes
array
将一个或多个叠加优惠码应用于结账会话。优惠码按照 数组顺序 应用(第一个代码减少基础价格,第二个代码减少已折扣的价格,以此类推),每个会话最多可应用 20 个优惠码。
下面的单一 discount_code 字段已 弃用,但仍然完全支持——现有集成可以继续无需更改地工作。它不能与同一请求中的 discount_codes 结合使用。请在方便时迁移到 discount_codes 以利用堆叠优势。
discount_code
string
已弃用
已弃用 — 新集成优先使用 discount_codes。此字段仍可用于向后兼容,但不能与同一请求中的 discount_codes 结合使用。
metadata
object
自定义键值对以存储有关会话的附加信息。
force_3ds
boolean
覆盖此会话的商家默认 3DS 行为。
minimal_address
boolean
默认值:"false"
启用最小地址收集模式。启用后,结账仅收集:
  • 国家:始终确定税的必要条件
  • ZIP/邮政编码:仅适用于需要销售税、增值税或消费税计算的地区
通过消除不必要的表单字段,这显著减少了结账过程中的摩擦。
启用最小地址以更快地完成结账。对于需要完整计费详细信息的业务,仍然可以进行完整的地址收集。
customization
object
自定义结账界面的外观和行为。
feature_flags
object
为结账会话配置特定功能和行为。
custom_fields
array
在结账时使用自定义表单字段收集来自客户的额外信息。您可以在每个结账会话中定义最多 5 个自定义字段。客户的响应包含在 webhook 负载中,并可通过 API 获取。
客户对自定义字段的响应包含在:
  • Webhookspayment.succeeded, subscription.active, 和其他相关事件负载中包含 custom_field_responses 数组
  • API 响应:支付和订阅对象包含 custom_field_responses
subscription_data
object
包含订阅产品的结账会话的附加配置。

使用示例

以下是展示不同业务场景下结账会话配置的10个综合示例:

1. 简单单产品结账

2. 多件商品购物车

3. 带试用期的订阅

4. 预确认结账

confirm 设为 true 时,客户将被直接带到结账页面,跳过任何确认步骤。

5. 带货币覆盖的结账

billing_currency 覆盖仅在您的账户设置中启用适应性货币时生效。如果适应性货币被禁用,则此参数将无效。

6. 为回头客保存的付款方式

7. B2B 结账带税号收集

8. 带叠加折扣代码的暗色主题结账

9. 区域支付方法(适用于印度的 UPI)

有关 UPI 配置和测试的详细信息,请参阅 印度支付方法 页面。

10. BNPL(先买后付)结账

有关 BNPL 配置和测试的详细信息,请参阅 先买后付(BNPL) 页面。

11. 使用现有支付方式进行即时结账

使用客户的保存支付方式创建一个立即处理的结账会话,跳过支付方式收集:
当使用 payment_method_id 时,confirm 必须设为 true,且必须提供现有的 customer_id。支付方式将根据支付的货币进行合格性验证。
支付方式必须属于客户,并与支付货币兼容。这使得回头客可以进行单击购买。

12. 简短链接用于更清晰的支付 URL

生成带有自定义后缀的简短、可分享的支付链接:
简短链接非常适合 SMS、电子邮件或社交媒体分享。它们比长 URL 更容易记住,并且为客户建立更多信任。

13. 跳过付款成功页面并立即重定向

在支付完成后立即重定向客户,跳过默认成功页面:
当您有一个提供更好用户体验的自定义成功页面时,使用 redirect_immediately: true。这尤其适用于移动应用程序和嵌入式结账流程。
当启用 redirect_immediately 时,客户将在支付完成后立即重定向到您的 return_url,完全跳过默认成功页面。

14. 强制语言

强制结账页面显示特定语言,覆盖客户的浏览器语言检测:
当您知道客户的首选语言(例如,从他们的账户设置中)或面向特定区域市场时,使用 force_language
支持的语言: 阿拉伯语 (ar), 加泰罗尼亚语 (ca), 中文 (zh), 荷兰语 (nl), 英语 (en), 法语 (fr), 德语 (de), 希伯来语 (he), 印度尼西亚语 (id), 意大利语 (it), 日语 (ja), 韩语 (ko), 马来语 (ms), 波兰语 (pl), 葡萄牙语 (pt), 罗马尼亚语 (ro), 俄语 (ru), 西班牙语 (es), 瑞典语 (sv), 泰语 (th), 土耳其语 (tr)

15. 收集自定义字段

在结账时使用自定义字段收集来自客户的额外信息:
自定义字段响应会自动包含在 webhook 负载(payment.succeeded, subscription.active,等)中,并可通过 API 获取。使用它们来丰富您的 CRM,触发上手流程,或自定义客户体验。
可用字段类型: text, number, email, url, date, dropdown, boolean

预览结账会话

在创建结账会话之前,您可以预览包括税费、折扣和总计在内的定价明细。这对于在客户进行结账之前显示准确的定价是有用的。

Preview API Reference

查看完整的预览端点文档。

从动态链接迁移到结账会话

关键区别

以前,在使用动态链接创建支付链接时,您需要提供客户的完整账单地址。 使用结账会话,这已不再必要。您可以直接传递您拥有的任何信息,其余的我们会处理。例如:
  • 如果您只知道客户的账单国家,只需提供该信息即可。
  • 结账流程将自动收集缺失的详细信息,然后才将客户移动到付款页面。
  • 另一方面,如果您已经拥有所有必需信息,并希望直接跳到付款页面,可以传递完整的数据集并在请求正文中包含 confirm=true

迁移过程

从动态链接迁移到结账会话很简单:
1

Update your integration

更新您的集成以使用新的 API 或 SDK 方法。
2

Adjust request payload

根据 Checkout Sessions 格式调整请求负载。
3

That's it!

是的。您的端不需要任何额外处理或特殊迁移步骤。

相关 API 参考

Create Checkout Session

创建结账会话的完整 API 参考,包含所有可用参数和选项

Preview Checkout Session

在创建会议之前预览定价、税收和总计的 API 参考
最后修改于 2026年7月9日