跳转到主要内容

Prerequisites

To integrate the Dodo Payments API, you’ll need:
  • A Dodo Payments merchant account
  • API credentials (API key and webhook secret key) from the dashboard
For a more detailed guide on the prerequisites, check this section.

API Integration

Checkout Sessions

Use Checkout Sessions to sell subscription products with a secure, hosted checkout. Pass your subscription product in product_cart and redirect customers to the returned checkout_url.
Mixed Checkout: You can combine subscription products with one-time products in the same checkout session. This enables use cases like setup fees with subscriptions, hardware bundles with SaaS, and more. See the Checkout Sessions guide for examples.

API Response

The following is an example of the response:
将客户重定向到checkout_url

Webhooks

在集成订阅时,您将接收到 webhooks 以跟踪订阅生命周期。这些 webhooks 有助于您有效地管理订阅状态和支付场景。 要设置您的 webhook 端点,请按照我们的详细集成指南

订阅事件类型

以下 webhook 事件跟踪订阅状态的变化:
  1. subscription.active - 订阅成功激活。
  2. subscription.updated - 订阅对象已更新(任何字段更改时触发)。
  3. subscription.on_hold - 由于续订失败导致订阅被暂停。
  4. subscription.failed - 创建授权失败时订阅创建失败。
  5. subscription.renewed - 订阅已为下一个计费周期续订。
为了可靠地管理订阅生命周期,我们建议跟踪这些订阅事件。
使用 subscription.updated 来获取关于任何订阅更改的实时通知,使您的应用程序状态与 API 保持同步而无需轮询。

支付场景

成功支付流程 当支付成功时,您将收到以下 webhooks:
  1. subscription.active - 表示订阅激活
  2. payment.succeeded - 确认初始付款:
    • 对于即时计费(0 试用天数):预计在 2-10 分钟内
    • 对于试用期:试用结束时
  3. subscription.renewed - 表示付款扣除并续订下一个周期。(基本上,每当订阅产品付款被扣除时,您将获得 subscription.renewed webhook 以及 payment.succeeded
支付失败场景
  1. 订阅失败
  • subscription.failed - 由于创建授权失败导致订阅创建失败。
  • payment.failed - 表示付款失败。
  1. 订阅暂停
  • subscription.on_hold - 由于续订支付失败或计划更改收费失败导致订阅被暂停。
  • 当订阅被暂停时,它将不会自动续订,直到更新支付方式。
最佳实践:为简化实施,我们建议主要跟踪订阅事件以管理订阅生命周期。
要完全了解如何读取 error_code/error_message,决定何时重试,并向客户显示失败,参见处理支付失败

subscription.failedsubscription.on_hold

这两个事件容易混淆,但它们需要非常不同的处理:
subscription.failed 是终端——订阅不能重新激活。客户必须创建新的订阅。此事件触发时绝不授予权限。

处理订阅暂停

当订阅进入 on_hold 状态时,您需要更新支付方式以重新激活。此部分解释订阅何时会暂停以及如何处理。

订阅何时暂停

当发生以下情况时,订阅被暂停:
  • 续订付款失败:由于资金不足、卡片过期或银行拒绝导致的自动续订收费失败
  • 计划更改费用失败:在计划升级/降级期间的即时收费失败
  • 支付方式授权失败:支付方式无法授权用于定期收费
on_hold 状态下的订阅将不会自动续订。您必须更新支付方式以重新激活订阅。

从暂停状态重新激活订阅

要从 on_hold 状态重新激活订阅,请使用更新支付方式 API。这会自动:
  1. 为剩余款项创建收费
  2. 为费用生成发票
  3. 使用新支付方式处理付款
  4. 付款成功后将订阅重新激活为 active 状态
1

Handle subscription.on_hold webhook

当您收到 subscription.on_hold webhook 时,更新您的应用程序状态并通知客户:
2

Update payment method

当客户准备好更新他们的支付方式时,请调用更新支付方式 API:
如果客户已保存支付方式,您还可以使用现有支付方式 ID:
3

Monitor webhook events

更新支付方式后,监控这些 webhook 事件:
  1. payment.succeeded - 剩余款项的收费成功
  2. subscription.active - 订阅已重新激活

示例订阅事件负载


更改订阅计划

您可以使用变更计划 API 端点升级或降级订阅计划。这允许您修改订阅的产品、数量,并处理分摊。

Change Plan API Reference

有关更改订阅计划的详细信息,请参阅我们的变更计划 API 文档。

分摊选项

更改订阅计划时,您有两种方式处理即时收费:

1. prorated_immediately

  • 根据当前计费周期的剩余时间计算分摊金额
  • 仅向客户收取新旧计划之间的差额
  • 在试用期间,这将立即将用户切换到新计划,并立即向客户收费

2. full_immediately

  • 向客户收取新计划的全部订阅金额
  • 忽略以前计划的任何剩余时间或积分
  • 在您想要重置计费周期或无论分摊如何都要收取全部金额时使用

3. difference_immediately

  • 升级时,客户会立即被收取两个计划金额之间的差额。
  • 例如,如果当前计划为 30 美元,客户升级到 80 美元,则立即收取 50 美元。
  • 降级时,当前计划的未使用金额将被添加为内部积分,并自动应用于未来的订阅续订。
  • 例如,如果当前计划为 50 美元,客户转换到 20 美元计划,剩余的 30 美元将被记入并用于下一个计费周期。

行为

  • 当您调用此 API 时,Dodo Payments 会立即根据您的分摊选项发起收费
  • 如果计划更改是降级并且您使用 prorated_immediately,将自动计算积分并添加到订阅的积分余额中。这些积分是特定于该订阅的,只会用于抵消同一订阅的未来定期付款
  • full_immediately 选项绕过积分计算并收取完整的新计划金额
谨慎选择分摊选项:使用 prorated_immediately 进行公平计费,以考虑未使用时间,或在您想要无视当前计费周期收取完整新计划金额时使用 full_immediately

收费处理

  • 计划更改时发起的即时收费通常在不到 2 分钟内完成处理
  • 如果此即时收费因任何原因失败,则订阅将自动暂停,直到问题解决

按需订阅

按需订阅允许您灵活地向客户收费,而不仅仅是根据固定计划。此功能适用于所有账户。
创建按需订阅: 要创建按需订阅,请使用 POST /subscriptions API 端点,并在请求正文中包含 on_demand 字段。这允许您授权支付方式而不进行即时收费,或设置自定义初始价格。 对按需订阅收费: 对于后续收费,请使用 POST /subscriptions//charge 端点并指定该交易要向客户收取的金额。
有关完整的分步指南,包括请求/响应示例、安全重试策略和 webhook 处理,请参见按需订阅指南

相关 API 参考

Create Subscription

创建订阅产品和管理订阅生命周期的 API 参考

Change Subscription Plan

升级、降级或更改带有分摊选项的订阅计划的 API 参考

Update Payment Method

更新支付方式和重新激活暂停订阅的 API 参考

Patch Subscription

更新订阅详细信息和配置的 API 参考
最后修改于 2026年7月9日