# 将付款关联到收款单

## 概述

绝大多数情况下，买家会把收款单标明的金额分毫不差地付到商户的加密钱包。但买家偶尔会出错，支付的金额与预留的不同。此时服务无法自动把付款关联到收款单并将其标记为已支付。遇到这种情况，只要确定自己在等待哪笔付款，商户就可以手动把付款关联到收款单——在控制台或通过 API。

## 关联条件

只有同时满足所有条件，关联才会完成：

1. **收款单状态**——`unpaid` 或 `expired`。已取消和已支付的收款单无法关联。取消不可逆。
2. **付款尚未关联到其他收款单**。一笔付款只能绑定一张收款单。
3. **付款到达的是该收款单涉及的钱包。**
4. **付款落在可用的付款窗口内**——收款单创建前 24 小时到创建后 24 小时。在收款单创建之前到达的付款可以关联；窗口之外的不行。

如果收款单属于其他项目且密钥限定到项目，方法返回 `Restricted project`。其他任一条件不满足时，返回不带原因的通用错误——请在自己一侧检查条件。

## 关联之后会发生什么

* 收款单转为**已支付**。
* 通知发往邮箱、Telegram 机器人和 Webhook URL——与自动关联时一样。
* 收款单金额 `invoice.amountFiatUSD` **被实际收到的金额覆盖**，按关联时刻的汇率折算成 USD。`invoice.amountFiat` 中的原始金额不变。
* 服务费按项目费率对实际收到的金额重新计算。多付时高于创建收款单时算出的值，少付时低于它。

## 请求

```bash
curl -X POST https://api.bitsby.app/invoices/bindPayment \
  -H "Authorization: Token MSvL2ltaDZdWVjmZURURMVWhqSJLT2NURjhL2Fla1Z1T1IxQTltKs1T3Ay" \
	-F "invoiceId=ade9550d-3dc7-4fd3-b94e-3b4c12aaaa0c" \
	-F "paymentId=a4c9e2ee-9a03-43e5-a1a1-00caf679d16a"
```

## 请求参数

| 参数        | 数据类型 | 说明                 | 示例                                 | 是否必填 |
| ----------- | -------- | -------------------- | ------------------------------------ | -------- |
| `invoiceId` | UUID     | 收款单 ID，UUID 格式 | ade9550d-3dc7-4fd3-b94e-3b4c12aaaa0c | 是       |
| `paymentId` | UUID     | 付款 ID，UUID 格式   | a4c9e2ee-9a03-43e5-a1a1-00caf679d16a | 是       |

## 响应示例

```json
{
   "result":"success",
   "data":"Invoice binded to payment"
}
```
