Skip to main content
Discount codes overview cover
Discount codes 可帮助您开展定向促销和激励活动。创建基于百分比的折扣,设置限额和有效期,限制适用产品,并在结账时应用折扣。

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 应用它们。
Dodo Payments dashboard 中显示现有折扣代码的折扣列表

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 生效所需的最低购物车小计(按货币计算)。
表单会在侧边面板中显示您正在创建的 code 的实时 Summary。切换到 Preview,查看折扣在结账时的显示效果:
New Discount Code form with the Summary and Preview side panel beside the discount details
表单下方是资格、限制条件和高级选项:
Eligibility, restrictions, and advanced options for a discount code
使用周期上限为订阅设置介绍性定价(例如“3 个月内享受 50% 折扣”)。
百分比 amount 在 API 中以 basis points 表示——1500 表示 15%。固定金额 amount 是货币值,其计价依据为代码的货币选项。

折扣类型

两种类型都可以叠加在同一个 discount_codes 数组中,并按照数组顺序应用。
Discount code editor with the Amount type selected, showing a flat 500 INR deduction

客户资格

设置 customer_eligibility,以控制哪些客户可以兑换代码:
Customer eligibility dropdown showing Any, First-time, Existing, and Specific customer options
一个 specific 代码最初没有任何符合资格的客户,在您向其添加客户之前会拒绝所有兑换请求。您可以在控制台中添加客户,也可以使用 discount customers API 添加。
将客户资格与 每位客户的使用次数上限 结合使用,可以限制每位客户兑换代码的次数,且该限制独立于总使用次数上限。

按货币设置选项

当您使用多种货币销售时,可以为每个 code 设置按货币的行为。在 Currency options 下,每个条目指定:
  • Amount — 对于 Amount 折扣,表示该货币中的固定扣减金额;对于 Percentage 折扣,表示最大折扣上限。在 API 中映射到 max_amount_possible。
  • Default — 将一种货币标记为默认货币。未配置的货币会根据此默认货币进行换算。
在 Advanced 中的 Require a minimum order value 下,单独设置按货币计算的最低金额:
  • Minimum subtotal — 仅当购物车在该货币中的小计达到此金额时,code 才会生效。0 表示无最低金额要求。
货币选项面板,显示 INR 和 USD 的按货币金额与最低小计
Amount 折扣至少需要一个具有可解析默认货币的货币选项,因为固定扣减金额在没有货币的情况下没有意义。Percentage 折扣不需要货币选项。
最低小计始终根据购物车的原始价格计算,而不是根据叠加折扣中前序折扣应用后的当前总额计算。叠加顺序不会改变最低金额是否满足。

结账体验

客户在结账字段中输入 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 管理

通过编程方式使用类型和金额创建折扣代码。

API Reference

查看创建折扣 API。
列出所有折扣,或检索折扣详情以进行管理和审计。

API Reference

浏览列表和检索 API。
使用客户可读的代码名称(例如 “SAVE20”)而不是内部 ID 查找折扣。

API Reference

通过代码名称检索折扣。
修改折扣配置,例如金额、到期时间或限制条件。

API Reference

了解如何更新折扣详情。
通过 ID 获取折扣,以便在应用前检查其状态、使用次数和限制条件。

API Reference

通过 ID 获取折扣。
停用或移除不再需要的折扣。

API Reference

删除折扣。
对于 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

附加自定义键值对,用于内部跟踪。
使用 Metadata 按营销活动、来源或内部参考 ID 标记折扣,以便之后核对使用情况并衡量 ROI。

在 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 是否适用。
  • 监控影响:按活动跟踪使用情况和转化率。
最后修改于 2026年9月26日