易支付 V1 接入文档

本站兼容易支付 V1 的 submit.php、mapi.php、api.php 三个入口,签名算法为 MD5,与常见易支付商户端一致。网关地址:https://mapay.subdns.cc/

1. 签名规则

  1. 取除 sign、sign_type 以外的全部非空参数;
  2. 按参数名 ASCII 升序排序;
  3. 拼成 a=1&b=2&c=3(不进行 URL 编码);
  4. 末尾直接拼接商户 KEY,取 MD5 小写 32 位,即 sign;
  5. sign_type 固定为 MD5。
sign = md5("clientip=203.0.113.10&device=mobile&money=1.00&name=测试商品&notify_url=https://shop.example.com/pay/notify&out_trade_no=20261031001&param=abc&pid=100000001&return_url=https://shop.example.com/pay/return&type=wxpay" + KEY)

2. 页面下单 submit.php

GET 或 POST 均可,参数见下表。成功后 302/303 跳转本站收银台。

参数必填说明
pid是应用 PID
out_trade_no是商户订单号,1~64 字符,同一应用唯一
name是商品名称
money是金额(元),最多两位小数
type否alipay / wxpay / unionpay / bank;留空则由用户在收银台选择
notify_url是异步通知地址,必须命中应用域名白名单
return_url是支付完成后的回跳地址
clientip否付款端 IP(IPv4/IPv6)
device否pc / mobile / qq / wechat / alipay / jump
param否扩展参数,原样回传,不超过 2048 字节
sign是MD5 签名
sign_type是固定 MD5

3. API 下单 mapi.php

仅支持 POST,type 与 clientip 必填。返回 JSON:

{ "code": 1, "msg": "订单已受理", "trade_no": "P2026103120381200011", "payurl": "https://mapay.subdns.cc/cashier/pay/B.../..." }

业务失败返回 {"code":0,"msg":"原因"}(HTTP 状态仍为 200)。

4. 查询与退款 api.php

act方法说明
queryGET/POST账户概览(订单数、余额固定 0.00)
orderGET/POST单笔查询:传 trade_no 或 out_trade_no
ordersGET/POST批量查询:page、limit(≤50)
settleGET/POST结算记录(本站自收,返回空列表)
refundPOST退款:trade_no、money 必填,可选 refund_no

认证使用 pid + key(应用 KEY 原文)或完整签名。order 返回字段:

{
  "code": 1, "msg": "查询成功",
  "trade_no": "P2026...", "out_trade_no": "20261031001",
  "api_trade_no": "", "type": "wxpay", "pid": "100000001",
  "addtime": "2026-10-31 20:38:12", "endtime": "2026-10-31 20:39:02",
  "name": "测试商品", "money": "1.00", "status": 1, "param": "abc", "buyer": ""
}

静态收款码没有上游退款接口,退款请求会登记为“不支持”,返回 code=-1,需人工处理。

5. 异步通知(商户接收)

支付成功且核对到账后,本站以 GET 请求通知 notify_url,并附带签名参数:

参数说明
pid应用 PID
trade_no本站支付单号(P 开头)
out_trade_no商户订单号
type实际支付方式
name商品名称
money订单原始金额
trade_status固定 TRADE_SUCCESS
param下单时的扩展参数(如有)
sign、sign_typeMD5 签名

商户返回 HTTP 2xx 且响应体为 success(小写,可含首尾空白)才视为确认,否则按退避自动重试。

6. 浏览器回跳

return_url 同样携带上述参数与签名,但仅当订单已成功、且商户已确认通知后才允许跳转;否则本站提示“等待商户系统确认”。

7. 到账推送(收款通道 → 本站)

后台通道详情里的推送地址形如 https://mapay.subdns.cc/api/pay/1/notify,需 POST 表单字段:

字段说明
from来源标识,如 SmsForwarder 或公众号名称
content消息正文,支持纯文本、微信 JSON、通用 JSON
timestamp13 位毫秒时间戳,误差需在容差内
signbase64(hmac_sha256(key=密钥, message=timestamp + "\n" + 密钥))

通用 JSON 示例:

{"amount":"1.03","remark":"1234","trade_no":"4200002..."}

微信手机端转发示例:

{"title":"微信支付","msg":"微信支付收款1.03元,备注:1234"}

成功返回 200;未匹配到唯一订单返回 HTTP 409(可重试),验签失败返回 400。

8. 签名速查(PHP)

<?php
function epay_sign(array $p, string $key): string {
    unset($p['sign'], $p['sign_type']);
    $p = array_filter($p, static fn($v) => $v !== null && $v !== '');
    ksort($p, SORT_STRING);
    $parts = [];
    foreach ($p as $k => $v) { $parts[] = $k . '=' . $v; }
    return md5(implode('&', $parts) . $key);
}

9. 常见错误

参数示例(未签名):

pid=100000001
type=wxpay
out_trade_no=20261031001
notify_url=https://shop.example.com/pay/notify
return_url=https://shop.example.com/pay/return
name=测试商品
money=1.00
clientip=203.0.113.10
device=mobile
param=abc