> ## 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) 接入指南

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

> [!WARNING]
>
> **阅读该接口文档前，务必先查看 [接口说明](https://doc.haipay.net/zh/history/V20260628/get-started/api-conventions.md)**

> [!TIP]
>
> 通过[**支付链接**](https://doc.haipay.net/zh/history/V20260628/api/version2/payment-link.md)或[**前置组件**](https://doc.haipay.net/zh/history/V20260628/payments/cards/payment-element.md)快速集成 MIT 支付。

## 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 | 真实手机号（格式参考 [电话号码格式](https://doc.haipay.net/zh/history/V20260628/resources/faq.md#zh_faq_phone-number-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，如果传递，用户可在支付页面点击返回到此页面 |
| paymentMethods | 是 | String | 支持的支付方式列表，英文逗号分隔，如 CREDIT\_CARD,GOOGLE\_PAY,APPLE\_PAY |
| sign | 是 | String | 签名 |

**请求示例**

```json theme={null}
{
  "appId": 1054,
  "orderId": "M233323000059",
  "amount": "299.99",
  "phone": "02012345678",
  "email": "robert.taylor@gmail.com",
  "name": "Robert Taylor",
  "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 | 在前置组件中使用的客户端令牌 (见[前置组件](https://doc.haipay.net/zh/history/V20260628/payments/cards/payment-element.md)) |
| 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": "299.99",
    "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 | 签名 |

## 支付类型与支付编码

| 币种 | 支付类型(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 |

## 测试卡号

测试卡号请参考 [测试卡号](https://doc.haipay.net/zh/history/V20260628/testing/test-cards.md)，包括模拟成功支付、拒付和争议场景。

## 相关主题

* [前置组件](https://doc.haipay.net/zh/history/V20260628/payments/cards/payment-element.md)
* [支付链接](https://doc.haipay.net/zh/history/V20260628/api/version2/payment-link.md)
* [VISA/MASTER 支付](https://doc.haipay.net/zh/history/V20260628/api/version2/creditcard.md)
* [处理异步通知并验证签名](https://doc.haipay.net/zh/operations/callback.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.