> ## 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.112.0（2026 年 8 月 5 日）

> Discount codes 新增 Amount 折扣、排期、客户资格规则和按货币配置选项，同时原生 Webhooks 体验全面重建并加入邮件提醒；此外还新增 Cash App Pay 订阅支付、SEPA Direct Debit 一次性 EUR 支付、更友好的支付失败消息、Payout Webhooks、自助更改登录邮箱、允许客户取消自己的订阅的设置，以及支付列表中的货币筛选器。

## 新功能

### 1. **Discount Codes：Amount 折扣、排期和资格规则**

Discount codes 不再仅支持百分比折扣。现在，代码可以扣除固定金额、按排期开始生效、针对不同货币设置不同价格，并限制允许兑换的客户。

**Amount 折扣**

设置 `type` 为 `flat`，即可扣除固定金额，而不是按百分比折扣。扣除金额会在整个购物车范围内合并计算，而不是按行项目分别应用。

| 类型         | API 值        | 行为                   |
| ---------- | ------------ | -------------------- |
| Percentage | `percentage` | 按百分比降低价格，可选择按货币设置上限  |
| Amount     | `flat`       | 扣除固定金额，在整个购物车范围内合并计算 |

<Frame>
  <img src="https://mintcdn.com/dodopayments/Rh05LkBeJE32G3qq/images/discount-codes/discount-flat-discount-option.png?fit=max&auto=format&n=Rh05LkBeJE32G3qq&q=85&s=38ce7f39a1ccbd26c61718f685fc4e71" alt="Discount code editor with the Amount type selected, showing a flat 500 INR deduction" style={{ maxHeight: '500px', width: 'auto' }} width="3474" height="1968" data-path="images/discount-codes/discount-flat-discount-option.png" />
</Frame>

**按货币配置选项**

`currency_options` 让同一个代码能够在你销售的每种货币中正常运行。每个条目针对一种货币设置最大折扣（Amount 代码为实际扣除金额，Percentage 代码为上限）和最低购物车金额。Amount 折扣至少需要一个可解析默认值的货币选项；Percentage 折扣的货币选项仍然是可选的。

**客户资格**

`customer_eligibility` 控制哪些客户可以兑换代码：

| 值            | 可兑换的客户            |
| ------------ | ----------------- |
| `any`        | 任意客户。这是默认值。       |
| `first_time` | 之前未向你购买过商品的客户。    |
| `existing`   | 之前向你购买过商品的客户。     |
| `specific`   | 仅限你添加到代码允许列表中的客户。 |

<Frame>
  <img src="https://mintcdn.com/dodopayments/Rh05LkBeJE32G3qq/images/discount-codes/discount-restriction.png?fit=max&auto=format&n=Rh05LkBeJE32G3qq&q=85&s=3c01240807a7ca2f13b33a9f4cf4ce43" alt="Customer eligibility dropdown showing Any, First-time, Existing, and Specific customer options" style={{ maxHeight: '500px', width: 'auto' }} width="2832" height="830" data-path="images/discount-codes/discount-restriction.png" />
</Frame>

你可以从 dashboard 管理允许列表，也可以使用新的 endpoints：`GET /discounts/{discount_id}/customers` 用于列出已关联的客户，`POST /discounts/{discount_id}/customers` 用于关联客户，`DELETE /discounts/{discount_id}/customers/{customer_id}` 用于解除一个客户的关联。

<Warning>
  一个 `specific` 代码初始没有任何符合资格的客户。在你为其关联客户之前，所有兑换请求都会被拒绝。
</Warning>

**排期和单个客户的兑换次数限制**

设置 `starts_at`，可将代码安排在未来生效；不设置则代码会立即生效，并且该时间必须严格早于 `expires_at`。使用 `per_customer_usage_limit` 限制单个客户兑换代码的次数。该限制独立于整体 `usage_limit`，且不能超过后者。

<Info>
  最低购物车金额始终根据购物车的原始价格计算，而不是根据叠加过程中某一时刻的累计金额计算。因此，叠加顺序不会改变最低金额是否满足。
</Info>

了解更多：[Discounts](/features/discount-codes) | [Create Discount](/api-reference/discounts/create-discount)

### 2. **全新重建的 Webhooks 体验**

dashboard 的 Webhooks 部分已重建为原生体验，取代原先嵌入式 portal。现在所有功能都位于 dashboard 内，拥有统一的表格、筛选器和导航，并且能够在移动设备上正常使用。

* **Endpoints** — 在侧边面板中创建和编辑 endpoints，从可搜索的树状结构中选择事件类型，并一眼查看过去 24 小时的错误率。
* **Activity and logs** — 在 **Delivery activity** 图表中查看一段时间内的投递尝试，浏览已投递的消息，并打开 **message detail** 页面查看 payload 以及每次投递的响应代码和耗时。每次尝试都可以从该页面重新播放。
* **Event catalog** — 浏览 Dodo Payments 发送的所有事件类型，以及对应的 schema 和示例 payload。
* **Endpoint overview** — 查看过去 24 小时的投递统计、签名密钥（可查看或轮换）以及 **Replay history**。
* **Testing** — 向 endpoint 发送示例事件，在正式上线前验证接收器。
* **Advanced** — 限制投递速率，管理发送到该 endpoint 的每个请求所带的自定义 headers，并编辑其转换规则。
* **Bulk replay** — 在 endpoint 上恢复失败的消息、重新播放从未分发的消息，或重新播放经过筛选的范围。
* **Email alerting** — 新增 **Settings** 标签页，可列出在发送到某个 endpoint 的投递开始失败时应接收邮件的地址。使用逗号分隔多个地址，留空即可关闭提醒。

<Info>
  这只是 dashboard 层面的变更。你现有的 endpoints、签名密钥、签名验证、事件名称和 payload 均未改变，无需进行集成调整。
</Info>

了解更多：[Webhooks](/developer-resources/webhooks) | [Webhook Events](/developer-resources/webhooks/intents/webhook-events-guide)

### 3. **Cash App Pay 支持订阅**

Cash App Pay 现在不仅支持一次性支付，也可以用于持续性订阅。它适用于以 USD 计费的美国结账流程，并与现有卡支付选项并列提供。

了解更多：[Digital Wallets](/features/payment-methods/digital-wallets)

### 4. **SEPA Direct Debit**

SEPA Direct Debit 现已在整个欧元区提供，让客户可以直接从银行账户付款，而无需使用卡。它适用于一次性支付的 EUR 结账流程。

<Warning>
  SEPA Direct Debit 不是即时支付。支付需要 **6 个工作日**才能确认，因此不要将授权视为结算；只有当支付进入 succeeded 状态后，才能履行订单。
</Warning>

了解更多：[European Payment Methods](/features/payment-methods/europe)

### 5. **更清晰的支付失败消息**

支付失败时，你和客户现在看到的是专门编写的文案，而不是原始处理器文本。每次失败都会通过包含 **46 个统一错误代码**的分类体系进行处理，每个代码都针对两类受众：

* **你**会在支付记录上看到标题和建议操作，从而了解应要求客户重试、联系银行，还是使用另一张卡。Payment 对象上的 `error_message` 现在会在 `error_code` 为已识别的统一代码时携带这段文案。
* **你的客户**会在结账失败页面、Customer Portal 和催缴邮件中看到通俗易懂的说明，例如：*"你的卡片安全码（CVC）似乎不正确。请重新输入后再试。"*

<Warning>
  对于涉及欺诈风险的拒付——`FRAUDULENT`、`LOST_CARD`、`STOLEN_CARD` 和 `PICKUP_CARD`——客户始终会看到通用消息，因此不会泄露真实原因。你仍然可以看到真实原因，但系统会标记警告，提示不要将其分享给客户。
</Warning>

了解更多：[Transaction Failures](/api-reference/transaction-failures) | [Payments](/features/transactions/payments) | [Get Payment Detail](/api-reference/payments/get-payments-1)

### 6. **允许客户取消自己的订阅**

**Allow Subscription Cancellation** 现在已成为 dashboard 设置中 **Subscriptions** 标签页下的一项正式设置，并且会在端到端流程中强制执行。关闭该设置后，Customer Portal 会禁用取消按钮，API 也会通过 `403` 拒绝客户发起的取消请求，包括立即取消和“在下一计费日期取消”流程。此前，该设置仅会隐藏按钮，因此客户仍可能通过 API 取消订阅。

该设置**默认启用**。你通过 merchant API 和 dashboard 发起的取消操作不受影响，客户也始终可以撤销已经安排的取消操作。

了解更多：[Customer Portal](/features/customer-portal) | [Subscriptions](/features/subscription)

### 7. **Payout Webhooks**

现在，你可以接收关于自身 payouts 的 Webhooks，从而无需轮询即可在会计系统中完成对账。

| 事件                   | 触发时机                               |
| -------------------- | ---------------------------------- |
| `payout.created`     | payout 被创建时，无论是自动 payout 周期还是周期外创建 |
| `payout.in_progress` | payout 到期日到达并开始处理时                 |
| `payout.on_hold`     | payout 被暂停或进入审核时                   |
| `payout.success`     | 向你的银行账户发放的 payout 完成结算时            |
| `payout.failed`      | payout 失败，金额和费用退回你的钱包时             |

<Note>
  `payout.created` 之前会以 `payout.not_initiated` 的名称发送。如果现有 endpoint 根据 `payout.not_initiated` 进行筛选，请将筛选条件更新为 `payout.created`，以确保继续匹配。此阶段 payload 上的 `status` 字段仍会报告 `not_initiated`。
</Note>

了解更多：[Payout Webhooks](/developer-resources/webhooks/intents/payout) | [Payouts Process](/features/payouts/payout-structure)

### 8. **从 dashboard 更改登录邮箱**

现在，你无需联系支持团队即可更改登录时使用的邮箱地址。Account 标签页已重新设计，其中包含新的 **Change Email** 部分，以及用于启动流程的 **Change email** 按钮。

验证分两步进行：我们会先向你的**当前**地址发送代码，以确认是你本人；然后向你的**新**地址发送第二个代码，以确认你拥有该地址。两者验证完成后：

* 此后使用新地址登录。旧地址将不再适用于密码、magic links 和通过邮件发送的代码。
* 任何已关联的身份提供商（例如 Google 或 GitHub 登录）都会解除关联，必须重新连接。
* 你的密码、businesses、团队访问权限和验证状态均不会改变。
* 系统会向旧地址发送通知，因此意外的更改不会悄无声息地发生。

了解更多：[My Account](/miscellaneous/accounts)

### 9. **Analytics：新增小组件和改进**

在 Analytics v3 重建的基础上，本次发布新增了可视化图表，并进一步优化了现有图表。

* **按国家/地区查看收入现在使用全宽度分级设色地图**，旁边显示按排名排列的国家/地区列表，该卡片也可以像其他卡片一样分享。
* **重新绘制的趋势图表**支持十字线悬停、x 轴上的滚动日期标签和紧凑型 tooltip。
* **新增日期预设**——**Last 30 days** 取代 Last 4 weeks，并新增 **Last 6 months**。
* \*\*你的筛选条件会保留。\*\*日期预设和比较模式现在会按 business 持久保存，并在不同设备间同步，而不是每次会话都重置为默认值。
* **Top customers 现在按姓名识别**，没有姓名时使用邮箱。
* 按国家/地区查看收入现在最多返回排名前 **150** 的国家/地区。

了解更多：[Dashboard Analytics](/features/analytics-and-reporting)

## 改进和 Bug 修复

### 10. **按货币筛选支付**

`GET /payments` 接受可选的 **`currency`** query parameter，因此你可以只列出以指定货币结算的支付，例如 `GET /payments?currency=EUR`。dashboard 的 Payments 表格也支持相同的筛选条件。

了解更多：[List Payments](/api-reference/payments/get-payments)

### 11. **争议响应期限延长至 10 天**

现在，争议创建后你有 **10 天**时间进行响应，之前为 4 天。dashboard 中争议的倒计时以及 API 返回的响应截止时间都会反映这一更长的期限。

了解更多：[Disputes](/features/transactions/disputes)

### 12. **更清晰的 payout 银行账户表单**

添加 payout 银行账户时更加明确。字段标签、描述和 tooltip 现在会根据你的 business 类型进行调整，因此对于个体经营者来说，账户持有人姓名和受益人姓名不再看起来重复。选择 **Other** 作为银行后，你可以自由输入名称；中国境内银行代码标记为 **CNAPS**；payouts 页面在测试模式下也会保持显示，因此你可以从任一模式访问已关联的账户。

了解更多：[Payouts Process](/features/payouts/payout-structure)

### 其他修复和改进

* \*\*支付失败时会撤销套餐变更产生的抵扣额。\*\*订阅套餐变更期间发放的按比例分摊抵扣额，如果最终支付未成功，将不再被保留。
* **付费试用发票会显示试用费用**，而不是常规的周期性价格。
* **Percentage 折扣会遵守最低购物车金额**，该金额根据基础价格而非累计金额计算；Discount lock 超时现在会返回独立的错误代码，而不是通用的 `503`。
* **删除已经移除的支付方式现在会成功**，而不是返回错误，使该调用能够安全地保持幂等性。
* **更新订阅支付方式时，修正了印度 mandate 最低金额所使用的货币。**
* **超出允许范围的 Credit ledger 条目**现在会被带类型的 `400` 拒绝，而不是延迟到之后才失败。
* **Pay-what-you-want 产品在共享 checkout links 中支持固定金额**，并且 entitlement IDs 会显示在 entitlement 详情面板中。
* Analytics 修复：生命周期价值序列、计入 MRR 的 add-ons、所有时间范围不再进行周期比较、在当前 bucket 处停止的序列，以及更清晰的范围和比较标签。
* 修复平台各处的小问题并提升稳定性。
