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
API Integration
Checkout Sessions
Use Checkout Sessions to sell subscription products with a secure, hosted checkout. Pass your subscription product inproduct_cart and redirect customers to the returned checkout_url.
- Node.js SDK
- Python SDK
- REST API
API Response
The following is an example of the response:checkout_url。
Webhooks
在集成订阅时,您将接收到 webhooks 以跟踪订阅生命周期。这些 webhooks 有助于您有效地管理订阅状态和支付场景。 要设置您的 webhook 端点,请按照我们的详细集成指南。订阅事件类型
以下 webhook 事件跟踪订阅状态的变化:subscription.active- 订阅成功激活。subscription.updated- 订阅对象已更新(任何字段更改时触发)。subscription.on_hold- 由于续订失败导致订阅被暂停。subscription.failed- 创建授权失败时订阅创建失败。subscription.renewed- 订阅已为下一个计费周期续订。
支付场景
成功支付流程 您收到的 webhooks 及其时间安排取决于产品是否包含试用期。 立即计费(0 个试用天数):subscription.active:mandate 已获授权,订阅已激活。payment.succeeded:确认首次扣款。预计在结账后的 2–10 分钟内收到。
- 试用期开始时(结账): payment method 获得授权后,
subscription.active触发。此时不会收取 recurring charge。 首次实际扣款会推迟到试用期结束。 - 试用期结束时: 系统会收取 recurring amount,您会同时收到
payment.succeeded和subscription.renewed。
subscription.renewed:每个 billing cycle 在扣除续订款项时触发,始终与payment.succeeded同时触发。它还会携带更新后的next_billing_date。
每当 subscription product 实际扣款时,您都会收到
subscription.renewed 和 payment.succeeded。请使用 subscription.renewed(而不是单独使用 payment.succeeded)作为延长下一周期访问权限的信号。- 订阅失败
subscription.failed- 由于创建 mandate 失败,订阅创建失败。payment.failed- 表示付款失败。
- 订阅暂停
subscription.on_hold- 由于续订付款失败或计划变更扣款失败,订阅被暂停。- 订阅暂停后,在 payment method 更新之前不会自动续订。
最佳实践:为简化实现,我们建议主要跟踪 subscription events,以管理订阅生命周期。
subscription.failed 与 subscription.on_hold
这两个事件很容易混淆,但处理方式完全不同:
处理暂停的订阅
当订阅进入on_hold 状态时,您需要更新 payment method 才能重新激活订阅。本节介绍订阅何时会暂停以及如何处理。
订阅暂停的情况
在以下情况下,订阅会被暂停:- 续订付款失败:由于余额不足、卡片过期或银行拒绝,自动续订扣款失败
- 计划变更扣款失败:升级或降级计划期间的即时扣款失败
- payment method 授权失败:payment method 无法获得 recurring charges 的授权
从暂停状态重新激活订阅
要将处于on_hold 状态的订阅重新激活,请使用 Update Payment Method API。该 API 会自动:
- 为剩余应付款创建扣款
- 为该扣款生成 invoice
- 使用新的 payment method 处理付款
- 付款成功后,将订阅重新激活为
active状态
1
Handle subscription.on_hold webhook
收到
subscription.on_hold webhook 后,请更新应用状态并通知客户:2
Update payment method
客户准备好更新 payment method 后,请调用 Update Payment Method API:
如果客户已保存 payment methods,您也可以使用现有的 payment method ID:
3
Monitor webhook events
更新 payment method 后,请监控以下 webhook events:
payment.succeeded- 剩余应付款的扣款成功subscription.active- 订阅已重新激活
Subscription event payload 示例
更改订阅计划
您可以使用 change plan API endpoint 升级或降级订阅计划。这允许您修改订阅的 product、quantity,并处理 proration。Change Plan API Reference
有关更改订阅计划的详细信息,请参阅我们的 Change Plan API 文档。
Proration 选项
更改订阅计划时,您可以选择以下两种方式处理即时扣款:1. prorated_immediately
- 根据当前 billing cycle 的剩余时间计算按比例分摊的金额
- 仅向客户收取新旧计划之间的差额
- 在试用期内,这会立即将用户切换到新计划,并立即向客户收费
2. full_immediately
- 向客户收取新计划的完整 subscription amount
- 忽略之前计划的剩余时间或 credits
- 适用于您希望重置 billing cycle,或无论 proration 如何都收取完整金额的情况
3. difference_immediately
- 升级时,立即向客户收取两个计划金额之间的差额。
- 例如,如果当前计划为 30 Dollars,客户升级到 80 Dollars,则会立即收取 $50。
- 降级时,当前计划的未使用金额会添加为 internal credit,并自动用于抵扣未来的订阅续订费用。
- 例如,如果当前计划为 50 Dollars,客户切换到 20 Dollars 的计划,则剩余的 $30 会记为 credit,并用于下一个 billing cycle。
4. do_not_bill
- 立即应用计划变更,但在变更时不会收取任何费用。
- 更新后的计划(以及 quantity/add-ons)会在下一次计划续订时计费,并且会保留原 billing date。
行为
- 调用此 API 时,Dodo Payments 会根据您选择的 proration 选项立即发起扣款
- 如果计划变更为降级,并且您使用
prorated_immediately,系统会自动计算 credits 并将其添加到订阅的 credit balance 中。这些 credits 专属于该订阅,只会用于抵扣同一订阅未来的 recurring payments full_immediately选项会跳过 credit calculations,并收取新计划的完整金额
扣款处理
- 计划变更时发起的即时扣款通常会在 2 分钟内完成处理
- 如果即时扣款因任何原因失败,订阅会自动进入暂停状态,直到问题得到解决
按需订阅
按需订阅允许您灵活地向客户收费,而不局限于固定时间表。所有账户均可使用此功能。
on_demand 字段。这样可以在不立即扣款的情况下授权 payment method,或设置自定义初始价格。
向按需订阅收费:
对于后续扣款,请使用 POST /subscriptions//charge endpoint,并指定要针对该交易向客户收取的金额。
如需完整的分步指南(包括 request/response 示例、安全的重试策略和 webhook 处理),请参阅 按需订阅指南。
关于订阅计费的关键事项
试用期执行的是 $0 授权,而不是扣款。 当订阅包含试用期时,试用期开始会创建一次 $0 mandate authorization 以保存卡片;首次实际扣款会在试用期结束时发生。在 payments list 中,处于试用期的订阅会显示一笔且仅一笔包含
amount: 0 的 payment。订阅生命周期:
on_hold = 续订失败(可恢复:提示客户更新 payment method;dunning retries 适用)。expired = 期限结束且未续订,无法重新激活。客户必须重新订阅。cancelled = 由客户或 merchant 结束。大多数续订失败是发卡方拒绝(余额不足、卡片被拒绝),而不是 Dodo 错误。相关 API 参考
Create Subscription
用于创建 subscription products 和管理订阅生命周期的 API 参考
Change Subscription Plan
用于通过 proration 选项升级、降级或更改订阅计划的 API 参考
Update Payment Method
用于更新 payment methods 和重新激活暂停订阅的 API 参考
Patch Subscription
用于更新订阅详细信息和配置的 API 参考