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

# MIT

> 了解 HaiPay MIT（Merchant Initiated Transaction）代收模式，包括流程图、代收 API、查询和退款接口。

<Warning>
  **阅读该接口文档前，务必先查看 [接口说明](/docs/zh/guide/api_description_guide)**
</Warning>

<Tip>
  通过[**支付链接**](/docs/zh/V20260628/api/version2/payment-link)或[**前置组件**](/docs/zh/V20260628/api/version2/frontend-payment-element)快速集成 MIT 支付。
</Tip>

## MIT 模式概述

**MIT（Merchant Initiated Transaction，商户发起交易）**
指在用户完成代收支付授权后，商户可在用户不在场的情况下主动发起的扣款。
该模式广泛应用于 **订阅支付、分期付款、会员续费、延迟扣款** 等业务场景。

### 基本流程

1. **用户授权**
   * 用户在首次支付时输入支付信息，并完成必要的身份验证。
   * 商户保存用户的支付凭证（`tokenID`），用于后续的扣款请求。

2. **商户发起扣款**
   * 商户根据约定的周期或条件，直接使用已保存的支付凭证发起扣款请求。
   * 由于交易为 **离线场景（off-session）**，即用户不参与交易，系统会依据用户授权和合规要求完成处理。

3. **认证要求**
   * 在大多数情况下，交易会直接完成。
   * 若发卡行或风控系统要求再次验证，交易可能进入待用户确认的状态，需要用户补充验证才能完成。

### 模式特点

* **提升体验**：用户无需每次手动输入支付信息。
* **合规安全**：符合国际支付法规和强客户认证（SCA）等要求。
* **应用广泛**：适用于订阅收费、自动续费、分期扣款、延迟结算等场景。

## MIT 流程图

```mermaid theme={null}
flowchart TD
    A[用户：在商户平台下单] --> B{交易类型判断}
    N[支付回调]
    O[商户：提供服务/发货]
    P[商户：通知用户支付失败]

    subgraph S2 [场景二：后续交易]
        direction TB
        I[后续交易] --> J[商户：向Haipay发送<br>交易请求与“令牌”]
        J --> K{Haipay：验证“令牌”}
        K -->|有效| L[Haipay：执行自动扣款]
        L --> N
        K -->|无效/失败| M[支付失败]
        M --> P
    end

    subgraph S1 [场景一：首次交易]
        direction TB
        C[首次交易] --> D[Haipay：提供支付链接]
        D --> E[用户：确认支付]
        E --> F[支付成功]
        F --> G[Haipay：生成安全“令牌”<br>（绑定用户与商户）]
        G --> N
        N --> O
    end

    B --> C
    B --> I
```

## 限额

| 交易类型 | 限额(单位:USD) |
| :--- | ---------- |
| 代收   | 0.99-1000  |

## MIT 支付 API

### 代收申请

**简要描述：**

* 创建MIT模式代收订单

**URL：**

美元: `/usd/mit/apply`
说明：appId需使用美元对应的，用户支付成功后增加美元余额

**参数：**

| 参数名             | 必选 | 类型      | 说明                                                                              |
| :-------------- | :- | :------ | :------------------------------------------------------------------------------ |
| appId           | 是  | Long    | 业务ID（后台获取，需要根据URL中的币种传递对应的业务ID）                                                 |
| orderId         | 是  | String  | 商户订单号(必须保证唯一性，长度不超过48)                                                          |
| name            | 否  | String  | 用户姓名，推荐使用真实姓名，格式：包含firstName和lastName，以空格分割的，示例：John Doe                        |
| phone           | 否  | String  | 真实手机号（格式参考 [电话号码格式](/docs/zh/guide/frequently_asked_question#phone_format) ）    |
| email           | 否  | String  | 真实电子邮件                                                                          |
| amount          | 是  | String  | 交易金额（精确到小数点后两位；禁止添加标点符号，例如：","）                                                 |
| payType         | 是  | String  | [支付方式类型](#inBankCode)                                                           |
| inBankCode      | 是  | String  | [支付方式编码](#inBankCode)                                                           |
| clientIp        | 否  | String  | 用户端ip                                                                           |
| callBackUrl     | 是  | String  | 用户支付成功后跳转地址                                                                     |
| callBackFailUrl | 是  | String  | 用户支付失败后跳转地址                                                                     |
| notifyUrl       | 否  | String  | 回调地址                                                                            |
| subject         | 是  | String  | 支付备注                                                                            |
| body            | 否  | String  | 备注详情                                                                            |
| partnerUserId   | 是  | String  | 用户唯一标识（如用户ID userId），用于风控系统，必须真实有效，否则会影响交易。 格式要求：数字、大小写字母或常用符号-\~!@#\$%&\*()\_。 |
| tokenID         | 否  | String  | 支付令牌，首次交易不需要，后续主动扣款需要，通过回调获取                                                    |
| loadingType     | 否  | Integer | 0（默认） – 显示正常的支付结果页面; 1 – 显示加载中动画（loading 转圈），不展示订单信息。                           |
| cancelUrl       | 否  | String  | 用户取消支付URL，如果传递，用户可在支付页面点击返回到此页面                                                 |
| sign            | 是  | String  | 签名                                                                              |

**请求示例**

```json theme={null}
{
  "appId": 1054,
  "orderId": "M233323000059",
  "amount": "300",
  "phone": "09230219312",
  "email": "23423@qq.com",
  "name": "test",
  "inBankCode": "USA",
  "payType": "BANK_TRANSFER",
  "partnerUserId": "149597870",
  "sign": "af0gAHkUOyYHu9owQp8NJ4mPEeUW4vuJcjdxqLIzrVw8AvpLSjD1DXupReSG/CyuSkFRyiIvCp5u703AuGGmfgD2gKDH3Ywau41bAbG2jnHJ8mtjiSJ5iWUzanyd4Kr7d1+rETbzUl7/BkW3t0X8UUFdqpxwG8DPUjAwUKfplWDHV7koG51Ozexd80DCsmW6eWdouAZ1uNXGLYmV3ftE3BmfNRtuv1C5bfTJWrTEIOxbF6g2uYOFZTlIgrQgd7/2PsAYwQQXNz8Q8CYl4OxqCv4pXJxaLWPbR5tqZu9og5kn32C9aHW/NlU1y39vzz+4ef81yPAqUV9oHlSMSPrMmw=="
}
```

**响应示例**

```json theme={null}
{
  "status": "1",
  "error": "00000000",
  "msg": "",
  "data": {
    "orderId": "M233323000059",
    "orderNo": "6023071013539074",
    "payUrl": "",
    "clientToken": "",
    "sign": "YEoA8Y2JzQFGVzwJSqmemm1Kfv/bfyIfCqv2dp7RNzT5B72AQvdD+nt2nR4sL1HWscvmNHyVt5ovAi7MMhy3ziih/sMph+wPx4YjH3W1h5DyBvSlWvaKfKrK5ViomZ0pPYWydwRHnnRnicxToHK9S6qtSy7Q73O0hdz4hJ9p41Th3ycBl2Q9SeqSZYSY1ohcPDhdyRf2y0prb8rHgpBKzxZ5BKX/1bsE9OmsSEHAEYT8OGgko6aNe8XPAhr4G48cpWTftvnGQuzh0O65nuZRI/PF+Axt2zJCVbFHDDSREI9NlAT82ebDqhlVdxQzKE67D1nxgjb3dPmDUYHOBpmwxQ=="
  }
}
```

返回data参数说明

| 参数名         | 类型     | 说明                                                                                 |
| :---------- | :----- | :--------------------------------------------------------------------------------- |
| orderId     | String | 商户订单号(必须保证唯一性)                                                                     |
| orderNo     | String | 平台订单号                                                                              |
| payUrl      | String | 支付链接                                                                               |
| clientToken | String | 在前置组件中使用的客户端令牌 (见[前置组件](/docs/zh/V20260628/api/version2/frontend-payment-element)) |
| sign        | String | 签名                                                                                 |

### 代收查询

**简要描述：**

* 查询代收订单

**URL：**

美元: `/usd/collect/query`

**参数：**

| 参数名     | 必选 | 类型     | 说明                              |
| :------ | :- | :----- | :------------------------------ |
| appId   | 是  | Long   | 业务ID（后台获取，需要根据URL中的币种传递对应的业务ID） |
| orderId | 是  | String | 商户订单号                           |
| orderNo | 否  | String | 平台订单号（响应快）                      |
| sign    | 是  | String | 签名                              |

**请求示例**

```json theme={null}
{
  "appId": 1054,
  "orderId": "M22222000028",
  "sign": "EmyJGm3ELzG4FsOd0Krs9ncbSjo4oTGuXWML+7djYla3+VAwd9wS17z38p/7U2ZAjroO04XrE7YXcB1o76Dtyipj3h3bJzs7FYma1QNkMUdt9hh7m8U6hMsMQX7vIWHtXNwz4pbTSC75+kQWXaCew7KoE6LXECdJU8AISgNgeki2TK9R0pCfshr0Z2SZBPeuT6OvIH5LdmqgdZhuqnffGU2qnXk4KMkO848e6/WALLBR+LE1wyKHfPnYVcuKSMVYxkvKyyIL5JIPEgW0o5bh4RCbaUn3NZtyYwrU1uQ3ZDFRThm9j6XAQP+LBlmq3nOePqBtp/VDVarRaV+7FbQg3A=="
}
```

**响应示例**

```json theme={null}
{
  "status": "1",
  "error": "00000000",
  "msg": "",
  "data": {
    "orderId": "M22222000028",
    "orderNo": "6023042811314347",
    "amount": "50.00",
    "actualAmount": "0.00",
    "fee": "0.00",
    "status": 1,
    "sign": "fP433ygWVDLVGxYkVnIJj7riGq0U3vyVX+MbBAImxfGLZkZcEAHVEoVYuULZSmXAAXKRSyd67WlDNm+24pougM54ofAoH4HMtCL2tfCoBReFyz3z02AGKkrKE2xWhSpWoqfQoBvzwuN5iGMMu0s9Q1YvqiwJ8WDVIENnmiIyD8qDJN7caHTW2US14/faG+69AvnuIgJ/nu7/jogOlgEYdZdVYU7gcRDE+d47KjlFGswQkJ/h/uzV7cWtUqrtOO7ZnZ3/z33Xx8awokX36QoYcPSWAU0h+Ij9O9402HNhm1eTbYcLU0uI/z8xCAtyAI/tTyiFijpiNlxUKQj+zKsILw=="
  }
}
```

返回data参数说明

| 参数名          | 类型      | 说明                                                  |
| :----------- | :------ | :-------------------------------------------------- |
| orderId      | String  | 商户订单号(必须保证唯一性)                                      |
| orderNo      | String  | 平台订单号                                               |
| amount       | String  | 交易金额                                                |
| actualAmount | String  | 收到金额                                                |
| fee          | String  | 手续费                                                 |
| status       | Integer | 状态(0未开始，1支付中，2成功（终态），3失败（终态）, -1异常待确认)              |
| payTime      | String  | 支付成功时间（当status=2时有值）(本地时间), 格式: yyyy-MM-dd HH:mm:ss |
| errorMsg     | String  | 支付失败原因（当status=3时有值）                                |
| sign         | String  | 签名                                                  |

## 退款 API

### 退款申请

**简要描述：**

* 发起原信用卡交易订单的退款操作，同步返回的退款状态请注意状态值，建议以查询接口为主。

**URL：**

美元: `/usd/refund/apply`

**参数：**

| 参数名          | 必选 | 类型     | 说明                               |
| :----------- | :- | :----- | :------------------------------- |
| appId        | 是  | Long   | 业务ID（后台获取，需要根据URL中的币种传递对应的业务ID）  |
| orderId      | 是  | String | 商户申请退款订单号（商户新的订单号，不能使用原代收的商户订单号） |
| orderNo      | 是  | String | 平台订单号（原代收返回的平台单号）                |
| refundAmount | 否  | String | 可选，不传则全额退款                       |
| sign         | 是  | String | 签名                               |

返回data参数说明

| 参数名      | 类型     | 说明                                                      |
| :------- | :----- | :------------------------------------------------------ |
| appId    | String | 业务ID                                                    |
| orderNo  | String | 平台订单号 （原代收返回的平台单号）                                      |
| orderId  | String | 商户退款申请订单号                                               |
| refundNo | String | 本次退款平台单号                                                |
| status   | String | 退款状态，1表示退款申请成功，0表示处理中，2表示失败，正常下发起就是返回处理中，后续需要调用查询接口查询状态 |
| errorMsg | String | 错误信息，不一定有值                                              |
| sign     | String | 签名                                                      |

### 退款查询

**简要描述：**

* 发起退款的订单的结果查询。

**URL：**

美元: `/usd/refund/refundQuery`

**参数：**

| 参数名      | 必选 | 类型     | 说明                              |
| :------- | :- | :----- | :------------------------------ |
| appId    | 是  | Long   | 业务ID（后台获取，需要根据URL中的币种传递对应的业务ID） |
| orderId  | 否  | String | 商户退款申请订单号                       |
| refundNo | 否  | String | 平台退款单号（申请退款返回的平台单号，如果有值优先查询此字段） |
| sign     | 是  | String | 签名                              |

返回data参数说明

| 参数名          | 类型     | 说明                                     |
| :----------- | :----- | :------------------------------------- |
| appId        | String | 商户订单号(必须保证唯一性)                         |
| orderNo      | String | 平台订单号(原代收返回的平台单号）                      |
| orderId      | String | 商户申请订单号                                |
| refundNo     | String | 平台退款单号                                 |
| status       | String | 退款状态，1表示退款申请成功，0表示处理中，2表示失败，退款结果以此状态为准 |
| errorMsg     | String | 错误信息，不一定有值                             |
| refundAmount | String | 退款金额                                   |
| sign         | String | 签名                                     |

## 支付类型与支付编码<a id="inBankCode" />

| 币种  | 支付类型(payType)  | 支付编码(inBankCode) | 限额        | 状态 | 说明         |
| :-- | :------------- | :--------------- | :-------- | :- | :--------- |
| USD | BANK\_TRANSFER | CREDIT\_CARD     | 0.99-1000 | 可用 | VISA       |
| USD | BANK\_TRANSFER | CREDIT\_CARD     | 0.99-1000 | 可用 | MasterCard |
| USD | BANK\_TRANSFER | CREDIT\_CARD     | 0.99-1000 | 可用 | JCB        |
| USD | EWALLET        | GOOGLE\_PAY      | 0.99-1000 | 可用 | Google Pay |
| USD | EWALLET        | APPLE\_PAY       | 0.99-1000 | 可用 | Apple Pay  |

## 测试卡号

测试卡号请参考 [测试卡号](/docs/zh/V20260628/api/version2/test-cards)，包括模拟成功支付、拒付和争议场景。

## 相关主题

* [前置组件](/docs/zh/V20260628/api/version2/frontend-payment-element)
* [支付链接](/docs/zh/V20260628/api/version2/payment-link)
* [VISA/MASTER 支付](/docs/zh/V20260628/api/version2/creditcard)
