代付API开发接口文档
以下为代付平台的 API 接口文档详细说明,帮助商户快速接入代付下单、查单和余额查询服务。
1、目录
1.1、代付下单
1.2、代付查单
1.3、代付余额查询
2、接口说明
2.1 接口基础信息
2.1.1 请求格式
所有接口均使用 POST 方式请求,编码参数 UTF-8,请求体格式为 application/json。
2.1.2 通用请求参数
| 参数 | 类型 | 是否必填 | 说明 | 备注 |
|---|---|---|---|---|
| mchNo | string | 是 | 商户号 | 由平台分配,建议使用商户 APIKey |
| reqTime | int64 | 是 | 请求时间戳 | 13 位毫秒时间戳 |
| sign | string | 是 | 请求签名 | 见验签说明 |
2.1.3 响应格式
所有接口响应格式统一如下:
| 参数 | 类型 | 说明 |
|---|---|---|
| code | int32 | 状态码,0 表示成功,其他表示失败 |
| msg | string | 响应说明 |
| sign | string | 响应签名,部分失败场景可能为空 |
| data | object | 返回数据,具体结构见各接口说明 |
2.1.4 签名说明
为了保证商户请求参数不被篡改,平台对开放接口提供 MD5 摘要签名认证。
完整签名规则、拼接示例和各语言代码示例请见签名算法。
注意事项:
sign本身不参与签名。- 参数名大小写必须与接口字段一致。
- 金额按平台约定的整数单位传输,不传小数。
reqTime使用 13 位毫秒时间戳。
2.1.5 金额说明
代付接口金额字段使用整数传输,单位为 0.0001 元,即真实金额乘以 10000 后传输。
示例:
| 真实金额 | 接口 amount |
|---|---|
| 0.5 元 | 5000 |
| 1 元 | 10000 |
| 100 元 | 1000000 |
3、接口明细
3.1 代付下单
3.1.1 场景说明
商户提交代付订单,平台受理后返回平台代付订单号和订单状态。商户订单号必须唯一,重复提交会返回订单已存在。
3.1.2 接口详情
接口地址
| 项目 | 内容 |
|---|---|
| URL | /api/v1/payout/order |
| 请求方式 | POST |
| Content-Type | application/json |
| 编码参数 | UTF-8 |
请求参数示例
{
"mchNo": "10001",
"mchOrderNo": "PO202406010001",
"amount": 1000000,
"accountName": "张三",
"accountNo": "6222020202020202020",
"bankName": "ICBC",
"bankBranch": "Shanghai Branch",
"notifyUrl": "https://merchant.example.com/notify/payout",
"payCode": "BANK",
"remark": "代付测试订单",
"reqTime": 1717651200000,
"sign": "MD5_UPPER_SIGN"
}字段说明
| 字段名称 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| mchNo | string | 是 | 商户号 |
| mchOrderNo | string | 是 | 商户代付订单号,商户侧必须唯一 |
| amount | int64 | 是 | 代付金额,单位:0.0001 元 |
| accountName | string | 是 | 收款人姓名 |
| accountNo | string | 是 | 收款账号/银行卡号 |
| bankName | string | 是 | 收款银行或机构名称 |
| bankBranch | string | 是 | 支行或机构附注 |
| notifyUrl | string | 是 | 异步通知地址;如不需要通知,请固定传 NOURL,不建议传空字符串 |
| payCode | string | 是 | 代付通道编码 |
| remark | string | 否 | 商户备注,原样透传或用于对账 |
| reqTime | int64 | 是 | 13 位毫秒时间戳 |
| sign | string | 是 | MD5 大写签名 |
3.1.3 返回状态码
| code | 说明 |
|---|---|
| 0 | 受理成功 |
| 200026 | 签名验证失败 |
| 其他 | 业务失败,具体以响应 msg 为准 |
3.1.4 响应示例
成功响应示例
{
"code": 0,
"msg": "success",
"sign": "MD5_UPPER_SIGN",
"data": {
"payoutOrderId": "PO20240601000001",
"mchOrderNo": "PO202406010001",
"amount": 1000000,
"state": 1,
"createdAt": 1717651200000
}
}失败响应示例
{
"code": 200026,
"msg": "签名验证失败"
}data字段说明
| 字段名称 | 类型 | 说明 |
|---|---|---|
| payoutOrderId | string | 平台代付订单号 |
| mchOrderNo | string | 商户代付订单号 |
| amount | int64 | 代付金额,单位:0.0001 元 |
| state | int32 | 订单状态,见订单状态说明 |
| createdAt | int64 | 创建时间,13 位毫秒时间戳 |
3.2 代付查单
3.2.1 场景说明
商户可通过商户代付订单号或平台代付订单号查询订单状态。
3.2.2 接口详情
接口地址
| 项目 | 内容 |
|---|---|
| URL | /api/v1/payout/query |
| 请求方式 | POST |
| Content-Type | application/json |
| 编码参数 | UTF-8 |
请求参数示例
{
"mchNo": "10001",
"mchOrderNo": "PO202406010001",
"payoutOrderId": "PO20240601000001",
"reqTime": 1717651200000,
"sign": "MD5_UPPER_SIGN"
}请求字段说明
| 字段名称 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| mchNo | string | 是 | 商户号 |
| mchOrderNo | string | 否 | 商户代付订单号,与 payoutOrderId 二选一 |
| payoutOrderId | string | 否 | 平台代付订单号,与 mchOrderNo 二选一 |
| reqTime | int64 | 是 | 13 位毫秒时间戳 |
| sign | string | 是 | MD5 大写签名 |
3.2.3 返回状态码
| code | 说明 |
|---|---|
| 0 | 查询成功 |
| 200026 | 签名验证失败 |
| 其他 | 业务失败,具体以响应 msg 为准 |
3.2.4 响应示例
成功响应示例
{
"code": 0,
"msg": "success",
"sign": "MD5_UPPER_SIGN",
"data": {
"payoutOrderId": "PO20240601000001",
"mchOrderNo": "PO202406010001",
"amount": 1000000,
"state": 3,
"successTime": 1717651800000,
"remark": ""
}
}失败响应示例
{
"code": 404,
"msg": "订单不存在"
}data字段说明
| 字段名称 | 类型 | 说明 |
|---|---|---|
| payoutOrderId | string | 平台代付订单号 |
| mchOrderNo | string | 商户代付订单号 |
| amount | int64 | 代付金额,单位:0.0001 元 |
| state | int32 | 订单状态,见订单状态说明 |
| successTime | int64 | 成功时间,13 位毫秒时间戳 |
| remark | string | 失败原因或备注 |
3.3 代付余额查询
3.3.1 场景说明
商户查询当前账户可用余额和冻结余额。
3.3.2 接口详情
接口地址
| 项目 | 内容 |
|---|---|
| URL | /api/v1/payout/balance |
| 请求方式 | POST |
| Content-Type | application/json |
| 编码参数 | UTF-8 |
请求参数示例
{
"mchNo": "10001",
"reqTime": 1717651200000,
"sign": "MD5_UPPER_SIGN"
}请求字段说明
| 字段名称 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| mchNo | string | 是 | 商户号 |
| reqTime | int64 | 是 | 13 位毫秒时间戳 |
| sign | string | 是 | MD5 大写签名 |
3.3.3 返回状态码
| code | 说明 |
|---|---|
| 0 | 查询成功 |
| 200026 | 签名验证失败 |
| 其他 | 业务失败,具体以响应 msg 为准 |
3.3.4 响应示例
成功响应示例
{
"code": 0,
"msg": "success",
"sign": "MD5_UPPER_SIGN",
"data": {
"mchNo": "10001",
"mchName": "测试商户",
"balance": 10000000,
"frozenBalance": 500000
}
}data字段说明
| 字段名称 | 类型 | 说明 |
|---|---|---|
| mchNo | string | 商户号 |
| mchName | string | 商户名称 |
| balance | int64 | 可用余额,单位:0.0001 元 |
| frozenBalance | int64 | 冻结余额,单位:0.0001 元 |
4、异步通知说明
4.1 通知场景
代付订单状态发生最终变化时,平台会按照商户下单时传入的 notifyUrl 推送异步通知。若下单时 notifyUrl 传 NOURL,平台不会向该订单推送异步通知。
异步通知用于商户系统接收代付结果,商户收到通知后应根据平台订单号或商户订单号更新本地订单状态,并做好幂等处理。
4.2 请求方式
| 项目 | 内容 |
|---|---|
| 请求方式 | POST |
| Content-Type | application/json |
| 编码参数 | UTF-8 |
| 通知地址 | 商户下单传入的 notifyUrl |
4.3 通知参数
平台通知商户时,请求体为 JSON 格式,字段如下:
| 字段名 | 类型 | 是否必返 | 说明 |
|---|---|---|---|
| platform_order_no | string | 是 | 平台代付订单号 |
| merchant_order_no | string | 是 | 商户代付订单号 |
| merchant_id | int64 | 是 | 平台商户 ID |
| amount | int64 | 是 | 订单金额,单位:0.0001 元 |
| actual_amount | int64 | 是 | 实际出款金额,单位:0.0001 元 |
| success_amount | int64 | 是 | 成功金额,单位:0.0001 元 |
| status | int32 | 是 | 订单状态,见 订单状态说明 |
| fail_reason | string | 是 | 失败原因;成功时通常为空 |
| currency | string | 是 | 币种,例如 RMB |
商户处理通知成功后,请返回 HTTP 2xx 状态码,并在响应体中返回 SUCCESS 字符串。
4.4 响应示例
响应参数示例
{
"platform_order_no": "PO20240601000001",
"merchant_order_no": "MCH202406010001",
"merchant_id": 10001,
"amount": 1000000,
"actual_amount": 1000000,
"success_amount": 1000000,
"status": 3,
"fail_reason": "",
"currency": "RMB"
}4.5 商户响应要求
商户回调接口收到通知并处理成功后,应返回 HTTP 2xx 状态码,且响应体内容为 SUCCESS。平台同时满足这两个条件时,认为通知成功。
| 商户响应 | 平台处理 |
|---|---|
HTTP 2xx 且响应体为 SUCCESS | 认为通知成功 |
非 HTTP 2xx,或响应体不是 SUCCESS | 认为通知失败,并记录商户响应内容 |
| 请求超时或网络异常 | 认为通知失败,并记录错误信息 |
商户响应示例:
SUCCESS4.6 幂等处理建议
商户应以 platform_order_no 或 merchant_order_no 作为唯一标识处理回调通知。同一订单可能因网络异常、人工补发或平台重试产生多次通知,商户系统应保证重复通知不会重复入账或重复更新关键业务数据。
建议处理流程:
- 根据
platform_order_no或merchant_order_no查询本地订单。 - 校验订单金额、商户号、币种等核心信息是否一致。
- 若订单已处理为最终状态,直接返回成功。
- 若订单未处理,则根据
status更新本地状态。 - 记录完整通知请求体和处理结果,便于后续排查。
4.7 注意事项
- 平台通知请求体不额外携带
sign字段,请以 HTTPS、IP 白名单和订单信息校验保障安全。 amount、actual_amount、success_amount均为整数金额,单位为0.0001 元。upstream_code和upstream_msg为可选字段,只有存在上游返回信息时才会返回。- 商户回调接口应尽快响应,避免因处理耗时超过 10 秒导致平台判定通知失败。
5、状态码说明
5.1 通用状态码
| code | 说明 |
|---|---|
| 0 | 成功 |
| 200026 | 签名验证失败 |
| 其他 | 业务失败,具体以响应 msg 为准 |
5.2 订单状态说明
| state | 说明 |
|---|---|
| 0 | 待处理 |
| 1 | 处理中 |
| 2 | 预留状态,商户侧无需作为最终状态处理 |
| 3 | 成功 |
| 4 | 失败 |
| 5 | 驳回 |
| 6 | 已冲正 |
| 7 | 订单处理中 |
其中 3、4、5、6 为最终状态。商户收到最终状态后应做好幂等处理,避免重复入账或重复更新订单。
6、接入流程
6.1 申请商户账号
- 联系平台申请商户账号。
- 获取商户号和商户密钥。
- 配置请求 IP 白名单和回调地址。
6.2 开发对接
- 根据本文档实现签名生成。
- 对接代付下单、查单和余额查询接口。
- 实现异步通知接收接口。
- 对订单号、回调通知做好幂等处理,并在通知处理成功后返回
SUCCESS。
6.3 测试联调
- 使用测试商户号和密钥发起请求。
- 确认金额单位、签名、时间戳格式正确。
- 验证下单、查单、余额查询和异步通知流程。
6.4 上线准备
- 切换生产商户号和密钥。
- 配置生产回调地址。
- 检查服务器 IP 白名单。
- 保留请求日志和回调日志,便于问题排查。
7、常见问题
7.1 签名验证失败怎么办?
- 确认
sign字段没有参与签名。 - 确认字段按 ASCII 升序拼接。
- 确认空值字段没有参与签名。
- 确认末尾追加的是正确商户密钥。
- 确认最终 MD5 结果转换为 32 位大写。
7.2 金额为什么不能传小数?
接口金额使用整数单位传输,单位为 0.0001 元。例如真实金额 1 元 应传 10000。
7.3 订单号重复怎么办?
mchOrderNo 是商户侧唯一订单号。重复提交同一个订单号会被平台识别为重复订单,建议商户侧保证订单号全局唯一。
7.4 查单应该使用哪个订单号?
优先使用平台返回的 payoutOrderId 查询;如果商户侧未保存平台订单号,也可以使用 mchOrderNo 查询。
7.5 回调接收不到怎么办?
- 检查
notifyUrl是否可公网访问。 - 检查回调接口是否可在 10 秒内返回 HTTP 2xx 和
SUCCESS。 - 检查回调接口是否超时或返回异常。
- 查看平台订单日志和商户服务日志。
8、联系方式
如有任何问题,请联系平台技术支持。
文档版本: v1.0
最后更新: 2026-06-25
