跳转到主要内容

新功能

1. 订阅支付重试

现在可以自动重试失败的续订付款以恢复收入,无需进行集成工作。从设置 → 恢复中启用,设置恢复窗口,Dodo Payments将按照智能计划重试续订,直到成功或窗口关闭。
启用支付重试的恢复设置页面和恢复窗口(天数)字段
设置描述默认
启用支付重试自动重试失败的订阅续订付款以恢复收入。关闭(选择加入)
恢复窗口(天)在放弃之前重试失败付款的时间长度(1–30)。13
工作原理
  1. 订阅续订付款失败,订阅转移到on_hold
  2. 如果拒绝是可重试的(例如资金不足或临时网络错误等软拒绝),则自动安排下一次尝试。
  3. 重试在会话外按退避计划进行,由您的恢复窗口限制。
  4. 第一次重试成功时,订阅返回到active,下一次账单日期照常提前。
重试计划 重试逐渐退避,以失败发票创建的时间为锚。只要在您的恢复窗口内,就会进行最多8次尝试
尝试上一次后的延迟
112 小时
224 小时
348 小时
472 小时
596 小时
6120 小时
77天
87天
仅重试软拒绝(例如资金不足、一般拒绝、处理或网络错误)。硬拒绝立即结束重试链,因为重试不会改变结果。
这补充了现有的恢复工具——订阅亏损邮件提醒客户更新他们的付款方式,而支付重试则是静默重试现有的方法。它们协同工作效果很好。 了解更多:订阅支付重试 | 订阅亏损

2. 业务按比例计算设置

现在可以在业务层面一次性设置默认升级和降级行为,而不是在每次计划变更时传递按比例分配参数。只要客户从客户门户更改其计划,这些默认值就会适用,并且您可以为每个产品集合覆盖它们
仪表板中的默认升级和降级行为设置,分别用于升级、降级和付款失败的控件
每个方向(升级和降级)都有两个独立控件,加上一个共享的付款失败政策:
设置字段默认(升级)默认(降级)
新计划开始时effective_at_on_upgrade / effective_at_on_downgradeimmediatelynext_billing_date
客户如何收费proration_billing_mode_on_upgrade / proration_billing_mode_on_downgradedifference_immediatelydifference_immediately
如果客户付款失败on_payment_failureapply_changeapply_change
新计划开始时 (effective_at)
行为
immediately客户立即切换到新计划。
next_billing_date客户在当前计划上继续,直到下一个账单日期,然后切换到新计划。
客户如何收费 (proration_billing_mode)
行为
prorated_immediately根据当前账单周期剩余时间,现在按比例收费。
full_immediately此时立即全额收取新计划价格。
difference_immediately仅收取新计划与当前计划之间的价格差。
do_not_bill此时不收取任何费用,任何调整将在下次发票中应用。
如果客户付款失败 (on_payment_failure)
行为
prevent_change如果付款未通过,客户保持在当前计划上。
apply_change即使付款未通过,也将客户切换到新计划。您可以稍后收取费用。
每个集合的覆盖 每个产品集合可以覆盖这些默认值中的任何一个。每个字段都是独立的——保持在从业务继承即可遵循业务默认值,或者设置明确的值以仅为该集合覆盖。
产品集合上的升级和降级行为覆盖部分,每个字段默认为'从业务继承'
每个设置按以下顺序解析:
per-request value (Change Plan API) → collection field (if set) → business field → system default
传递给更改计划 API 的每个请求值 (proration_billing_mode, effective_at, on_payment_failure) 始终优先于集合和业务默认设置。新设置仅更改未提供明确值时的情况——这适用于所有客户门户计划更改。
了解更多:订阅升级和降级 | 产品集合

3. 为B2B发票收集企业名称

B2B客户现在可以在发票上显示其法定企业名称,而不是买家的个人姓名。当在结账时提供有效的税号时,您还可以收集相关的customer_business_name,以便发票反映购买实体。
启用 '以企业名义购买' 切换的结账页面,显示企业名称和税号字段
当客户在结账时选择以企业名义购买时,将提示他们输入企业名称税号 只有当所有三个条件都满足时,企业名称才会出现在发票上:
  1. 交易是B2B (b2b = true)
  2. 存在tax_id
  3. 提供了非空的customer_business_name
否则将使用客户的个人姓名。 在结账时收集 直接设置customer_business_name,和/或启用allow_customer_editing_business_name以允许客户输入或编辑它与他们的税号一起在结账页面上:
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_abc', quantity: 1 }],
  customer: { email: 'buyer@acme.com' },
  tax_id: 'GB123456789',
  customer_business_name: 'Acme Corp Ltd',
  feature_flags: {
    allow_tax_id: true,
    allow_customer_editing_business_name: true // let the customer enter/edit it
  },
  return_url: 'https://yoursite.com/return'
});
它的适用范围
表面字段备注
结账会话customer_business_name, feature_flags.allow_customer_editing_business_name最大250个字符;标识默认值为false
付款customer_business_name最大250个字符
订阅customer_business_name通过PATCH /subscriptions/{id} 设置或清除
customer_business_name 不能在没有 tax_id 的情况下设置。发送没有税号的企业名称将被拒绝。清除tax_id也将清除企业名称,因为两者在发票上是耦合的。
周围的空白会被裁剪,而仅空白值被视为明确清除——因此存储的数据始终与发票上的渲染匹配。
了解更多:B2B支付 | 发票管理 | 结账会话

错误修复和改进

  • 平台各处的小错误修复和稳定性改进。
Last modified on June 9, 2026