
Checkout Sessions
在托管结账时,通过
discount_codes 和 UI 控件应用一个或多个叠加代码。Get Discount
通过 ID 检索折扣,以检查其状态和限制条件。
Get Discount by Code
使用代码名称(例如 “SAVE20”)查找并验证折扣。
Create Discount (API)
以编程方式创建新的折扣码。
List & Update Discounts
浏览和管理现有折扣;根据需要更新或删除。
Plan Change Discounts
在升级或降级订阅计划时应用折扣码。
什么是折扣码?
Discount codes 是一种促销令牌,可在结账时减少订单总额。您可以将其用于季节性活动、首次购买激励、挽回客户优惠或协商的 B2B 定价。 Codes 可以是基于百分比的折扣(例如,立减 15%)或固定金额折扣(例如,立减 $5)。每次结账、payment 或 subscription 最多可以叠加 20 个 codes,因此客户可以在同一笔交易中同时兑换欢迎优惠和活动 code。将 codes 限制为特定产品,限制每位客户的使用次数,设置有效期,并控制哪些客户有资格兑换。主要优点
- 灵活的折扣:基于百分比或固定金额的折扣
- 可叠加的 codes:每次结账、payment 或 subscription 最多应用 20 个 codes
- 定向控制:按产品、subscription 周期和客户资格进行限制
- 活动管理:计划开始日期、有效期、总使用次数和每位客户的使用次数限制
- 按货币定价:为每种货币设置固定扣减金额、金额上限和最低小计
创建折扣码
在您的 Dodo Payments 仪表板中创建折扣码,然后在托管结账或通过 API 应用它们。
Dashboard 设置
- Discount Name(必填):在 dashboard 中使用的内部标签。
- Code(必填):客户在结账时输入的字符串。您可以生成随机 code,也可以输入自定义 code(至少 3 个字符,并会自动转换为大写)。
- Type(必填):Percentage(按百分比减免)或 Amount(固定金额扣减)。
- Amount(必填):对于 percentage,在 dashboard 中填写折扣百分比(例如,
15表示 15%)。通过 API 使用时,相同的值以 basis points 表示(1500)。对于 amount,填写 code 默认货币中的固定扣减金额。 - Start Date(可选):安排 code 在未来日期启用。留空则立即启用。
- Expiration Date(可选):超过此日期后,code 将无法再兑换。
- Usage Limit(可选,位于 Advanced 下):所有客户累计可兑换的最大次数。
- Per-Customer Usage Limit(可选,位于 Advanced 下):单个客户最多可兑换的次数。当两者都设置时,该值必须小于或等于总使用次数限制。
- Customer Eligibility(可选):限制可兑换的客户范围——所有客户、首次购买客户、现有客户或手动选择的客户列表。
- Currency Options(可选):您所销售的每种货币对应的折扣金额。请参阅 Per-Currency Options。
- Product Restriction(可选):将 code 限制为特定产品。
- Subscription Cycle Limit(可选,位于 Advanced 下):折扣适用的计费周期数。留空表示无限期适用。
- Preserve on Plan Change(可选):当 subscription 更改计划时保持折扣有效(
preserve_on_plan_change)。 - Metadata(可选):附加自定义键值对,用于内部跟踪。
- Require a minimum order value(可选,位于 Advanced 下):code 生效所需的最低购物车小计(按货币计算)。


百分比
amount 在 API 中以 basis points 表示——1500 表示 15%。固定金额 amount 是货币值,其计价依据为代码的货币选项。折扣类型
两种类型都可以叠加在同一个
discount_codes 数组中,并按照数组顺序应用。

客户资格
设置customer_eligibility,以控制哪些客户可以兑换代码:

按货币设置选项
当您使用多种货币销售时,可以为每个 code 设置按货币的行为。在 Currency options 下,每个条目指定:- Amount — 对于 Amount 折扣,表示该货币中的固定扣减金额;对于 Percentage 折扣,表示最大折扣上限。在 API 中映射到
max_amount_possible。 - Default — 将一种货币标记为默认货币。未配置的货币会根据此默认货币进行换算。
- Minimum subtotal — 仅当购物车在该货币中的小计达到此金额时,code 才会生效。
0表示无最低金额要求。

最低小计始终根据购物车的原始价格计算,而不是根据叠加折扣中前序折扣应用后的当前总额计算。叠加顺序不会改变最低金额是否满足。
结账体验
客户在结账字段中输入 discount codes。符合条件的 codes 会立即应用,金额总计也会随之更新。
在 Checkout Sessions 中,将
discount_codes(一个数组)传入,以预先应用一个或多个 codes。折扣输入字段默认显示。将 feature_flags.allow_discount_code 设置为 false 可将其隐藏。Codes 会按照数组顺序应用,最多 20 个。叠加折扣代码
Checkout sessions、payments 和 subscriptions 可以通过discount_codes 数组接受最多 20 个叠加的 codes。Codes 会按照数组顺序应用:第一个符合条件的 code 会减少起始价格,后续 code 会继续减少已经折扣后的价格,以此类推。启用 Purchasing Power Parity 后,起始价格为经过 PPP 调整的金额。响应中包含 discount_ids(用于 payments/subscriptions)和 discounts(更丰富的每个折扣详情,包括位置和剩余 subscription 周期数)。
单数形式的
discount_code 字段已弃用,但为保持向后兼容仍得到完整支持。它不能与同一请求中的 discount_codes 结合使用。请迁移到 discount_codes(数组形式),以使用叠加功能和更丰富的响应。对于启用了 Card-Optional at Zero Price 的 subscription price,如果一组 codes 将今天应付的金额一直减少到
0,也会跳过 card 要求——客户无需保存 payment method 即可完成结账,与原生的 0 price 相同。API 管理
Create discounts
Create discounts
通过编程方式使用类型和金额创建折扣代码。
API Reference
查看创建折扣 API。
List and retrieve
List and retrieve
列出所有折扣,或检索折扣详情以进行管理和审计。
API Reference
浏览列表和检索 API。
Get discount by code
Get discount by code
使用客户可读的代码名称(例如 “SAVE20”)而不是内部 ID 查找折扣。
API Reference
通过代码名称检索折扣。
Update discounts
Update discounts
修改折扣配置,例如金额、到期时间或限制条件。
API Reference
了解如何更新折扣详情。
Retrieve a discount
Retrieve a discount
通过 ID 获取折扣,以便在应用前检查其状态、使用次数和限制条件。
API Reference
通过 ID 获取折扣。
Delete discounts
Delete discounts
停用或移除不再需要的折扣。
API Reference
删除折扣。
Manage the customer allow list
Manage the customer allow list
对于
customer_eligibility 设置为 specific 的折扣,管理可以兑换该折扣的客户:GET /discounts/{discount_id}/customers— 列出已添加的客户(分页,每页最多 100 个)。POST /discounts/{discount_id}/customers— 按 ID 添加客户。该调用具有幂等性,最多接受 1000 个 ID,并且所有 ID 必须已存在于您的业务中。响应仅返回本次请求中提交的 ID,因此请调用列表端点以读取完整的允许列表。DELETE /discounts/{discount_id}/customers/{customer_id}— 移除单个客户。
常见使用场景
- 新客优惠:针对新产品的限时发布促销
- 批量或 B2B:针对特定产品组合的合同折扣
- 客户留存活动:在防止客户流失的工作流中使用召回代码
- 季节性营销活动:基于节日或活动的促销
集成示例
创建带 Metadata 的 Discount
附加自定义键值对,用于内部跟踪。在 Checkout Sessions 中应用 Discounts
预先应用一个或多个叠加的 discounts,并显示 code 输入界面。在计划变更期间应用 Discounts
当客户升级或降级 subscription 时,提供促销价格。discount_codes 参数控制 discounts 的处理方式:
从响应中 subscription 的
discounts 数组读取所有已应用的 discounts。每个条目都包含 discount_id、position、cycles_remaining 以及原始 code。隐藏 Discount Code 字段
Discount 输入默认显示。将allow_discount_code 设置为 false 可将其隐藏。
最佳实践
- 清晰命名:使用易于识别且与活动名称匹配的 codes。
- 设置时间范围:添加有效期,以营造紧迫感并防止滥用。
- 合理限定范围:限制适用于特定产品,避免利润损失。
- 尽早验证:在确认结账前检查 code 是否适用。
- 监控影响:按活动跟踪使用情况和转化率。