易支付(epay)协议完全兼容 —— 已对接易支付的发卡网、商城、CMS 可零成本切换,仅需修改网关地址与商户密钥。
商户ID(pid) 与 商户密钥(key)/api/pay/,成功后携带签名跳转收银台(系统直接返回 302 到收银台)notify_url 发送异步回调;验证签名后完成发货,并原样输出 successsign、sign_type 及空值参数a=1&b=2&c=3(不带转义、末尾无 &)function epaySign($params, $key) {
unset($params['sign'], $params['sign_type']);
foreach ($params as $k => $v) { if ($v === '' || $v === null) unset($params[$k]); }
ksort($params, SORT_STRING);
$str = '';
foreach ($params as $k => $v) { $str .= ($str === '' ? '' : '&') . $k . '=' . $v; }
return strtolower(md5($str . $key));
}timestamp(Unix秒,±300秒有效)与 nonce(一次性随机串,最长64位)可开启 API 防重放,两者均需参与签名。商户后台「API 安全」还可配置 IP 白名单。POST https://你的域名/api/pay/(结尾必须带斜杠 /;表单或 JSON 均可)。签名验证通过后,浏览器请求将被 302 重定向到收银台;程序请求返回 JSON。
| 参数 | 必填 | 说明 |
|---|---|---|
| pid | 必填 | 商户ID |
| type | 必填 | wxpay / alipay(收款码通道);wxpay_native / wxpay_jsapi / wxpay_h5 / alipay_qr / alipay_wap(官方通道) |
| out_trade_no | 必填 | 商户订单号,需保证唯一;重复提交返回原订单号(幂等) |
| notify_url | 必填 | 异步回调地址,支付成功后系统 POST/GET 通知 |
| return_url | 选填 | 支付完成后浏览器跳转地址(自动附加签名参数) |
| name | 必填 | 商品名称(≤128字) |
| money | 必填 | 金额(元),须在商户配置的金额范围内 |
| sign / sign_type | 必填 | 签名 / 固定 MD5 |
| timestamp / nonce | 选填 | 防重放参数(参与签名) |
{
"code": 1,
"msg": "success",
"data": {
"trade_no": "CP20250101120001", // 平台订单号
"out_trade_no": "M20250101001", // 商户订单号
"money": "10.05", // 实际应付金额(开启金额浮动时与提交金额略有尾差)
"type": "wxpay",
"account_id": "ACCxxxx",
"payurl": "https://域名/pay/CP20250101120001" // 收银台地址
}
}money 会加 ±几分钱的随机尾数用于区分并发订单,返回值与回调中的金额均为实际支付金额;原始金额可在后台订单列表查看。支付成功后,系统通过 GET 方式请求 notify_url 并附加以下参数(含签名)。业务方验证签名后处理订单,返回/输出 success 表示通知成功,否则系统将按队列重试。
| 参数 | 说明 |
|---|---|
| pid | 商户ID |
| trade_no | 平台订单号 |
| out_trade_no | 商户订单号 |
| type | 支付通道 |
| name | 商品名称 |
| money | 实际支付金额 |
| trade_status | 固定 TRADE_SUCCESS |
| sign / sign_type | 签名(同下单规则验签)/ MD5 |
<?php
$key = '你的商户密钥';
// 复用上面的 epaySign()
if (epaySign($_GET, $key) !== $_GET['sign']) { exit('sign error'); }
if ($_GET['trade_status'] === 'TRADE_SUCCESS') {
$outTradeNo = $_GET['out_trade_no'];
$money = $_GET['money'];
// 1. 按商户订单号查本地订单
// 2. 校验金额一致(防伪造)
// 3. 更新订单为已支付(务必做幂等,防止重复回调重复发货)
}
echo 'success';POST /api/query,参数 pid + trade_no(二选一,优先 trade_no)或 out_trade_no,附加签名。
{
"trade_no": "CP20250101120001",
"out_trade_no": "M20250101001",
"money": "10.05",
"type": "wxpay",
"status": "paid", // pending / paid / expired
"paid_at": "2025-01-01 18:00:00",
"created_at": "2025-01-01 17:43:20"
}POST /api/refund(易支付风格签名)。官方通道订单调用微信/支付宝 API 原路退回;收款码通道订单仅登记退款(资金在个人钱包,需线下退回)。money 不传 = 全额退款,支持多次部分退款。
| 参数 | 必填 | 说明 |
|---|---|---|
| pid | 必填 | 商户ID |
| trade_no / out_trade_no | 必填 | 平台订单号 / 商户订单号(二选一) |
| money | 选填 | 退款金额,缺省全额 |
| note | 选填 | 退款原因备注 |
| sign / sign_type | 必填 | 签名 / MD5 |
监控挂机意外掉线时,可用外部对账脚本把聚合码平台收款明细推送回来自动补单:
curl -X POST "https://你的域名/api/reconcile/push?key=对账令牌" \ -d "money=10.05" \ -d "pid=100001" \ -d "minutes=30" # money 必填:实际收款金额 # pid 选填:限定商户(多笔同金额订单时必须指定) # minutes 选填:匹配时间窗(分钟,默认 30) # 匹配成功自动走支付成功全流程(回调 / 通知 / 统计)
码支付 · 易支付兼容接入文档 · v17