> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# v1.101.0 (2026年6月2日)

> 自动订阅支付重试以恢复失败的续订收入、业务级别的按比例计算默认值以及每个产品集合的覆盖、为B2B发票收集企业名称——还有错误修复和改进。

## 新功能

### 1. **订阅支付重试**

现在可以自动重试失败的**续订**付款以恢复收入，无需进行集成工作。从**设置 → 恢复**中启用，设置恢复窗口，Dodo Payments将按照智能计划重试续订，直到成功或窗口关闭。

<Frame>
  <img src="https://mintcdn.com/dodopayments/OBU18S2UplPD5yUr/images/changelog/v1.101.0/payment-retries.png?fit=max&auto=format&n=OBU18S2UplPD5yUr&q=85&s=ec1729cb3f435317486609abdd392e24" alt="启用支付重试的恢复设置页面和恢复窗口（天数）字段" style={{ maxHeight: '500px', width: 'auto' }} width="2874" height="1566" data-path="images/changelog/v1.101.0/payment-retries.png" />
</Frame>

| 设置          | 描述                      | 默认       |
| ----------- | ----------------------- | -------- |
| **启用支付重试**  | 自动重试失败的订阅续订付款以恢复收入。     | 关闭（选择加入） |
| **恢复窗口（天）** | 在放弃之前重试失败付款的时间长度（1–30）。 | 13       |

**工作原理**

1. 订阅续订付款失败，订阅转移到`on_hold`。
2. 如果拒绝是可重试的（例如资金不足或临时网络错误等软拒绝），则自动安排下一次尝试。
3. 重试在会话外按退避计划进行，由您的恢复窗口限制。
4. 第一次重试成功时，订阅返回到`active`，下一次账单日期照常提前。

**重试计划**

重试逐渐退避，以失败发票创建的时间为锚。只要在您的恢复窗口内，就会进行最多**8次尝试**：

| 尝试 | 上一次后的延迟 |
| -- | ------- |
| 1  | 12 小时   |
| 2  | 24 小时   |
| 3  | 48 小时   |
| 4  | 72 小时   |
| 5  | 96 小时   |
| 6  | 120 小时  |
| 7  | 7天      |
| 8  | 7天      |

<Info>
  仅重试**软拒绝**（例如资金不足、一般拒绝、处理或网络错误）。**硬拒绝**立即结束重试链，因为重试不会改变结果。
</Info>

这补充了现有的恢复工具——**订阅亏损邮件**提醒客户更新他们的付款方式，而支付重试则是静默重试现有的方法。它们协同工作效果很好。

了解更多：[订阅支付重试](/features/recovery/payment-retries) | [订阅亏损](/features/recovery/subscription-dunning)

### 2. **业务按比例计算设置**

现在可以在业务层面一次性设置**默认升级和降级行为**，而不是在每次计划变更时传递按比例分配参数。只要客户从客户门户更改其计划，这些默认值就会适用，并且您可以**为每个产品集合覆盖它们**。

<Frame>
  <img src="https://mintcdn.com/dodopayments/OBU18S2UplPD5yUr/images/changelog/v1.101.0/plan-change-settings.png?fit=max&auto=format&n=OBU18S2UplPD5yUr&q=85&s=c112c41336cb348712fcd72426a25d5c" alt="仪表板中的默认升级和降级行为设置，分别用于升级、降级和付款失败的控件" style={{ maxHeight: '500px', width: 'auto' }} width="2880" height="1598" data-path="images/changelog/v1.101.0/plan-change-settings.png" />
</Frame>

每个方向（升级和降级）都有两个独立控件，加上一个共享的付款失败政策：

| 设置           | 字段                                                                          | 默认（升级）                   | 默认（降级）                   |
| ------------ | --------------------------------------------------------------------------- | ------------------------ | ------------------------ |
| **新计划开始时**   | `effective_at_on_upgrade` / `effective_at_on_downgrade`                     | `immediately`            | `next_billing_date`      |
| **客户如何收费**   | `proration_billing_mode_on_upgrade` / `proration_billing_mode_on_downgrade` | `difference_immediately` | `difference_immediately` |
| **如果客户付款失败** | `on_payment_failure`                                                        | `apply_change`           | `apply_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`   | 即使付款未通过，也将客户切换到新计划。您可以稍后收取费用。 |

**每个集合的覆盖**

每个产品集合可以覆盖这些默认值中的任何一个。每个字段都是独立的——保持在**从业务继承**即可遵循业务默认值，或者设置明确的值以仅为该集合覆盖。

<Frame>
  <img src="https://mintcdn.com/dodopayments/OBU18S2UplPD5yUr/images/changelog/v1.101.0/product-collection-plan-change.png?fit=max&auto=format&n=OBU18S2UplPD5yUr&q=85&s=289862178ff45fd5f8faa84773198314" alt="产品集合上的升级和降级行为覆盖部分，每个字段默认为'从业务继承'" style={{ maxHeight: '500px', width: 'auto' }} width="2880" height="1562" data-path="images/changelog/v1.101.0/product-collection-plan-change.png" />
</Frame>

每个设置按以下顺序解析：

```
per-request value (Change Plan API) → collection field (if set) → business field → system default
```

<Info>
  传递给[更改计划 API](/api-reference/subscriptions/change-plan) 的每个请求值 (`proration_billing_mode`, `effective_at`, `on_payment_failure`) 始终优先于集合和业务默认设置。新设置仅更改未提供明确值时的情况——这适用于所有客户门户计划更改。
</Info>

了解更多：[订阅升级和降级](/developer-resources/subscription-upgrade-downgrade) | [产品集合](/features/product-collections)

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

B2B客户现在可以在发票上显示其**法定企业名称**，而不是买家的个人姓名。当在结账时提供有效的税号时，您还可以收集相关的`customer_business_name`，以便发票反映购买实体。

<Frame>
  <img src="https://mintcdn.com/dodopayments/OBU18S2UplPD5yUr/images/changelog/v1.101.0/business-name-b2b.png?fit=max&auto=format&n=OBU18S2UplPD5yUr&q=85&s=64003549cf86354a9b9b4e925a299740" alt="启用 '以企业名义购买' 切换的结账页面，显示企业名称和税号字段" style={{ maxHeight: '500px', width: 'auto' }} width="2880" height="1570" data-path="images/changelog/v1.101.0/business-name-b2b.png" />
</Frame>

当客户在结账时选择**以企业名义购买**时，将提示他们输入**企业名称**和**税号**。

只有当**所有三个**条件都满足时，企业名称才会出现在发票上：

1. 交易是B2B (`b2b = true`)
2. 存在`tax_id`
3. 提供了非空的`customer_business_name`

否则将使用客户的个人姓名。

**在结账时收集**

直接设置`customer_business_name`，和/或启用`allow_customer_editing_business_name`以允许客户输入或编辑它与他们的税号一起在结账页面上：

```typescript theme={null}
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}` 设置或清除 |

<Warning>
  `customer_business_name` 不能在没有 `tax_id` 的情况下设置。发送没有税号的企业名称将被拒绝。清除`tax_id`也将清除企业名称，因为两者在发票上是耦合的。
</Warning>

<Note>
  周围的空白会被裁剪，而仅空白值被视为明确清除——因此存储的数据始终与发票上的渲染匹配。
</Note>

了解更多：[B2B支付](/features/b2b-payments) | [发票管理](/features/invoice-generation) | [结账会话](/developer-resources/checkout-session)

## 错误修复和改进

* 平台各处的小错误修复和稳定性改进。
