1. 接入准备
注册 → 实名认证 → 控制台领取 PID 与 KEY。所有接口走 HTTPS,UTF-8,金额单位元(两位小数)。
生产网关 https://api.your-domain.com/
商户控制台 https://mer.your-domain.com/
PID = 20260001 KEY = ************************(建议 90 天轮换)
2. 统一下单
接口 /pay/submit。兼容易支付核心参数,新增扩展字段 poll_rule(轮询策略)与 multi(一码多付开关)。
| 参数 | 必填 | 说明 |
| pid | 是 | 商户 ID |
| out_trade_no | 是 | 商户订单号(唯一) |
| type | 是 | wxpay / alipay / unionpay / multi |
| money | 是 | 金额,两位小数 |
| notify_url | 是 | 异步通知地址 |
| poll_rule | 否 | 轮询策略 JSON,见第 3 节 |
| sign | 是 | MD5 签名(见第 6 节) |
// 成功响应
{
"code": 0,
"pay_url": "https://pay.your-domain.com/c/HY8f3a…", // 收银台跳转
"qr_code": "https://qr.your-domain.com/HY8f3a….png", // 二维码图
"channel": "alipay#02" // 轮询命中的通道
}
3. 轮询支付策略
恒岳轮询支付支持三种策略,可组合使用;命中通道后仍保留备用链路,失败自动切换。
| 策略 | 字段值 | 适用场景 |
| 权重轮询 | weight | 均衡消耗各通道额度,降低风控集中度 |
| 金额分流 | amount | 大额走稳定通道,小额走低费率通道 |
| 时段路由 | time | 按小时段启停通道(如凌晨只留骨干) |
// poll_rule 示例
{
"strategy": "weight",
"channels": [
{"id": "alipay#02", "weight": 40},
{"id": "epay#01", "weight": 35},
{"id": "free#03", "weight": 25}
],
"breaker": {"fail_rate": 0.05, "cooldown": 600},
"fallback": true
}
4. 码支付 / 免签支付
码支付:控制台上传收款码 → 生成聚合码,用户扫码自动识别通道(一码多付),到账触发语音播报与回调。
免签支付:绑定收款账号开启监听,无需签约。回调结构与易支付一致,验签代码可直接复用。
// 免签支付状态查询
GET /pay/status?out_trade_no=HY…&sign=…
响应:{"trade_status": "TRADE_SUCCESS", "paid_at": "2026-10-09 14:02:11"}
5. 聚合代付
接口 /pay/dp。出款前请确保账户余额充足;同名强校验,回执与银行电子回单自动归档进对账系统。
| 参数 | 必填 | 说明 |
| out_biz_no | 是 | 商户出款单号(唯一) |
| account | 是 | 收款银行卡号 |
| name | 是 | 收款人姓名(强校验) |
| amount | 是 | 出款金额 |
| memo | 否 | 附言,出现在回单 |
POST /pay/dp
out_biz_no=DP20261009-001&account=6222…&name=张三
&amount=23600.00&sign=…
响应:{"code":0,"status":"PROCESSING","dp_id":"HYDP…"}
异步通知:status → SUCCESS / FAIL(附银行回执号)
6. 验签与回调四原则
签名:参数 ASCII 升序 → a=1&b=2… → 尾拼 KEY → MD5 小写。回调处理务必遵守:
① 验签 核对 sign,防伪造请求
② 验额 核对 money 与本地订单一致,防篡改
③ 幂等 同一 out_trade_no 只入账一次
④ 应答 输出 "success"(否则网关按 15s/1m/5m/30m 重试)
7. 错误码
| code | 含义 | 处理 |
| 0 | 成功 | — |
| 40001 | 签名错误 | 检查 KEY 与排序规则 |
| 40002 | 订单号重复 | out_trade_no 保持唯一 |
| 41001 | 代付余额不足 | 充值后再发起 |
| 42001 | 全部通道熔断 | 稍后重试或联系技术 |
| 42002 | 金额超通道限额 | 调整 poll_rule 或金额 |
去支付实验室跑一遍 →