> For the complete documentation index, see [llms.txt](https://docs.topay.mobi/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.topay.mobi/cn/integration/crypto-payments/acquiring/payment-amount-handling.md).

# 支付金额处理

对数字货币收单中的足额付款、少付和多付进行对账。

客户的实际转账金额可能高于或低于收银台订单金额。在决定履约或为客户入账时，请区分订单金额、实际付款金额和商户净入账金额。

钱包模式将收到的充值关联到客户；收银台模式还需要将实际付款与预期订单金额进行核对。

## 收银台默认行为 <a href="#default-checkout-behavior" id="default-checkout-behavior"></a>

默认情况下，仅当实际付款金额与订单金额完全一致时，收银台模式的订单才会成功，Topay 才会发送支付成功通知：

```
pay_amount = order_amount
```

## 启用少付和多付接受配置 <a href="#enable-underpayments-and-overpayments" id="enable-underpayments-and-overpayments"></a>

请联系 **Topay 运营团队**，为您的账户启用接受少付和多付的配置。

启用后，即使客户付款金额低于或高于订单金额，Topay 也可以将收银台订单处理为成功。Topay 会在 [Webhook 通知](/cn/integration/webhook.md)中报告实际收款金额，按该金额计算服务费，并将扣费后的净额计入商户余额。

此平台配置与您应用中的履约规则相互独立。是否按原订单履约、允许一定差额或按实际付款金额入账，仍由您的系统决定。执行操作前，务必检查交易最终状态。

## 金额字段 <a href="#amount-fields" id="amount-fields"></a>

统一的 [Webhook 通知](/cn/integration/webhook.md)定义了以下字段：

| 字段              | 含义             |
| --------------- | -------------- |
| `order_amount`  | 请求的订单金额。       |
| `pay_amount`    | 实际付款金额。        |
| `fee_amount`    | 按实际付款金额计算的服务费。 |
| `actual_amount` | 扣除服务费后的净额。     |

```
actual_amount = pay_amount - fee_amount
```

对账时请使用通知中的 `fee_amount`。下方示例仅为说明而假设按比例收取手续费，不代表您账户的实际费率。

## 足额付款 <a href="#exact-payment" id="exact-payment"></a>

```
pay_amount = order_amount
```

客户已支付订单要求的金额。履约前请确认订单已成功；仅金额一致并不能证明交易成功。

## 少付 <a href="#underpayment" id="underpayment"></a>

```
pay_amount < order_amount
```

对于 `100 USDT` 的订单，支付 `99 USDT` 表示少付 `1 USDT`。不要仅因检测到充值就自动履行完整订单，请按该收银台流程选定的差额接受规则处理。

## 多付 <a href="#overpayment" id="overpayment"></a>

```
pay_amount > order_amount
```

对于 `100 USDT` 的订单，支付 `101 USDT` 表示多付 `1 USDT`。请记录完整付款金额，并按您的业务规则处理多付部分，不要假定平台会自动退还差额。

## 金额示例 <a href="#example-amounts" id="example-amounts"></a>

假设订单金额为 `100 USDT`，示例服务费为实际付款金额的 `1%`：

| 场景   | `order_amount` | `pay_amount` | `fee_amount` | `actual_amount` |
| ---- | -------------- | ------------ | ------------ | --------------- |
| 足额付款 | 100            | 100          | 1.00         | 99.00           |
| 少付   | 100            | 99           | 0.99         | 98.01           |
| 多付   | 100            | 101          | 1.01         | 99.99           |

表中的少付和多付示例以已启用差额接受配置且交易成功为前提。所有金额的单位均为 USDT。商户净入账与客户入账是两个不同概念：向客户提供多少价值由您的应用决定。

## 选择接受规则 <a href="#choose-an-acceptance-policy" id="choose-an-acceptance-policy"></a>

请为每个收银台流程选择一种规则，而不是将以下方案叠加使用：

| 规则      | 应用处理方式                                                 |
| ------- | ------------------------------------------------------ |
| 要求足额付款  | 仅在 `pay_amount = order_amount` 且订单成功时履约；金额不一致的订单转交审核。  |
| 允许一定差额  | 交易成功且 `abs(pay_amount - order_amount)` 在业务规定的范围内时接受付款。 |
| 按实际付款入账 | 对于余额充值，根据成功付款的实际金额及已披露的收费规则入账。                         |

在依赖平台成功处理差额付款之前，请先联系 Topay 运营团队启用接受少付和多付的配置。应用中的接受规则不会改变平台的订单状态。

## 处理检查清单 <a href="#processing-checklist" id="processing-checklist"></a>

1. 验证通知签名，并将事件关联到正确的订单或客户。
2. 检查[订单状态](/cn/reference/enums/order-status.md)；需要核对结果时使用[查询订单](/cn/reference/api-reference/query-order.md)。
3. 使用同一币种比较金额。对于法币计价、数字货币付款的订单，不要直接比较不同币种的数值；请结合对应币种和汇率信息处理。
4. 金额计算使用十进制定点运算。
5. 应用选定的接受规则，并确保履约或余额更新具有幂等性。
6. 对逾期付款或尚未解决的金额差异进行对账，不要假定会自动退款、重试或调整余额。

## 相关参考 <a href="#related-references" id="related-references"></a>

* [数字货币收单](/cn/integration/crypto-payments/acquiring.md)
* [收银台模式](/cn/integration/crypto-payments/acquiring.md#checkout-mode)
* [Webhook 字段](/cn/integration/webhook.md)
* [查询订单](/cn/reference/api-reference/query-order.md)
