x-api-key| Header | 必填 | 说明 |
|---|---|---|
| Content-Type | 是 | 固定为 application/json |
| x-api-key | 是 | 平台分配的 api_key |
x-api-key 识别商户身份,Body 不需要传 api_key 和 sign。
{
"code": 200, // 200 = 成功
"msg": "success", // 提示信息
"data": { ... } // 业务数据
}
| code | 含义 |
|---|---|
| 200 | 成功 |
| 0 | 失败(msg 中有错误原因) |
| status | 含义 | 说明 |
|---|---|---|
| 0 | 待支付 | 订单已创建,等待用户付款 |
| 1 | 已收款 | 平台已确认收款 |
| 2 | 已过期 | 超过有效期未付款,订单失效 |
/api/home/payList
获取当前可用的收款方式列表(类别名称、金额范围)。无需传 Body 参数。
POST /api/home/payList
Content-Type: application/json
x-api-key: 你的api_key
{}
Body 传空 JSON {} 即可。
{
"code": 200,
"msg": "success",
"data": [
{
"id": 1,
"cate_name": "微信收款", // 收款方式名称
"min_amount": 10, // 最小金额(元)
"max_amount": 5000 // 最大金额(元)
},
{
"id": 2,
"cate_name": "支付宝收款",
"min_amount": 10,
"max_amount": 5000
},
{
"id": 3,
"cate_name": "银行卡收款",
"min_amount": 100,
"max_amount": 50000
}
]
}
/api/home/getPay
创建一笔收款订单,返回收款人信息(姓名、账号、二维码等),展示给用户去付款。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| pay_id | int | 是 | 收款方式ID(通过 payList 获取) |
| amount | float | 是 | 订单金额(元),如 100.00 |
| order_no | string | 是 | 商户订单号,必须唯一,用于后续查单和回调匹配 |
POST /api/home/getPay
Content-Type: application/json
x-api-key: 你的api_key
{
"pay_id": 1,
"amount": 100.00,
"order_no": "SHOP202405240001"
}
{
"code": 200,
"msg": "success",
"data": {
"order_no": "CZ20240524120000AbCd1234", // 平台订单号(重要:查单时用这个)
"out_order_no": "SHOP202405240001", // 商户订单号(原样返回)
"amount": 100.00,
"info": {
"cate_name": "微信收款", // 收款方式名称
"real_name": "张三", // 收款人姓名
"nickname": "张三的店铺", // 收款人昵称
"qrcode": "https://xxx.com/qr.png", // 收款二维码(图片URL)
"account": "138****8888", // 收款账号
"phone": "138****8888" // 收款手机号
},
"expire_time": 1716570000, // 订单过期时间戳(秒)
"expire_at": "2024-05-24 13:00:00", // 订单过期时间(格式化)
"expire_minutes": 10 // 剩余有效分钟数
}
}
order_no(平台订单号),后续查单和回调都会用到。
/api/home/queryOrder
根据平台订单号查询支付状态。适用于轮询场景,建议每 5-10秒 查询一次,status=1 时表示已收款。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| order_no | string | 是 | 平台订单号(getPay 返回的 order_no) |
POST /api/home/queryOrder
Content-Type: application/json
x-api-key: 你的api_key
{
"order_no": "CZ20240524120000AbCd1234"
}
{
"code": 200,
"msg": "success",
"data": {
"out_order_no": "SHOP202405240001", // 商户订单号
"order_no": "CZ20240524120000AbCd1234", // 平台订单号
"amount": 100.00,
"status": 1, // 0=待支付 1=已收款 2=已过期
"pay_time": 1716567890, // 收款时间戳(秒)
"create_time": 1716567800 // 创建时间戳(秒)
}
}
┌─────────┐ 每5~10秒调一次 ┌──────────────┐ │ 你的系统 │ ──────────────────→ │ queryOrder │ │ │ │ │ │ │ ←── status=0 ─────── │ 还没付,继续等 │ │ │ ←── status=1 ─────── │ 已收款,停止轮询 │ │ │ ←── status=2 ─────── │ 已过期,停止轮询 │ └─────────┘ └──────────────┘
callback_url(你告诉客服在后台配置的地址如 https://url/*** - http://url/***)
支付成功后,平台会主动向你的 callback_url 发送 POST 通知。 这是最实时的通知方式,强烈建议接入。
{
"merchant_no": "M2024001", // 商户编号
"out_order_no": "SHOP202405240001", // 商户订单号
"order_no": "CZ20240524120000AbCd1234", // 平台订单号
"amount": "100.00", // 订单金额(字符串)
"status": 1, // 1 = 已收款
"pay_time": 1716567890, // 收款时间戳
"nonce": "abc123def456", // 随机字符串(防重放)
"timestamp": "1716567890", // 当前时间戳
"sign": "A1B2C3D4E5F6..." // 签名(验签用)
}
防止伪造通知。验证方法见下方「签名验证规则」。
确认 timestamp 与当前时间相差不超过60秒;
检查 nonce 是否已处理过(建议用 Redis/DB 缓存去重)。
根据 out_order_no 找到订单,标记为"已支付",处理发货等业务逻辑。
验签通过后,直接返回纯文本 success。
不要返回 HTML、JSON、XML,不要带空格和换行。
① 将收到的参数中除了 sign 外的所有参数按参数名 ASCII 码升序排列
② 拼接字符串:key1=value1&key2=value2&key=你的secret_key
③ 取 MD5 并转大写,与收到的 sign 比对
示例:收到的参数为 { amount:"100.00", order_no:"CZ...", ... }
排序后拼接:
amount=100.00&merchant_no=M2024001&nonce=abc123&order_no=CZ...&out_order_no=SHOP001&pay_time=1716567890&status=1×tamp=1716567890&key=你的secret_key
MD5大写后就是你该收到的 sign 值,两者一致则验签通过。
success(或网络超时5秒),本次通知视为失败/api/home/payList 获取可用收款方式/api/home/getPay 创建订单,将返回的收款信息展示给用户/api/home/queryOrder