支付接口开发文档
本协议同时支持 MD5 + RSA 兼容模式 与 仅 RSA 安全模式 两种对接方式,参数名与返回结构保持一致;原有 SDK 仅需更换域名即可接入,商户可在商户中心「API 接入」页一键切换签名方式。
一、接口地址
创建订单POST /api/pay/create
页面跳转下单POST /api/pay/submit
查询订单GET|POST /api/pay/query
发起退款POST /api/pay/refund
可用支付方式GET /api/pay/types
查询商户信息GET|POST /api/merchant/query
收银台页面GET /cashier?trade_no=平台订单号
异步通知由商户在下单时通过 notify_url 指定
易支付兼容入口:/submit.php(页面下单)、/mapi.php(JSON 下单)、/api.php?act=order(查单)。后台可添加多个地区 API 节点,商户中心「API 接入」页默认展示本站域名并支持下拉切换。
二、MD5 签名规则(兼容模式)
1. 把待签名参数按 参数名 ASCII 升序 排序(ksort);
2. 跳过 sign、sign_type、空值与数组类型参数;
3. 按 k=v& 拼接后去掉末尾的 &;
4. 在串尾直接拼接商户密钥,做 MD5,结果小写作为 sign。
clientip=127.0.0.1&money=1.00&name=测试商品¬ify_url=https://example.com/notify&out_trade_no=NO20261107001&pid=1000&type=alipay
sign = md5( 上面的字符串 + 商户密钥 )
三、RSA 签名规则(安全模式)
RSA 的待签名串构造规则与 MD5 完全一致,仅把 MD5 换成非对称签名,避免密钥在传输与日志中明文出现。在商户中心切换为「仅 RSA 安全模式」后,该商户的请求必须携带 RSA 系列 sign_type。
sign_typeRSA / RSA2(均可)
签名算法RSA-SHA256(OPENSSL_ALGO_SHA256)+ base64
请求签名商户私钥签名 → 平台用「商户公钥」验签
响应与通知平台私钥签名 → 商户用「平台公钥」验签
密钥管理商户中心「API 接入」可一键生成密钥对或粘贴公钥;平台公钥在同页展示
// 1. 构造待签名串(与 MD5 相同,不做 URL 编码)
ksort($params);
$parts = [];
foreach ($params as $k => $v) {
if ($v === '' || is_array($v) || $k === 'sign' || $k === 'sign_type') continue;
$parts[] = $k . '=' . $v;
}
$content = implode('&', $parts);
// 2. 商户私钥签名(PKCS#8 PEM)
openssl_sign($content, $sig, $merchantPrivateKey, OPENSSL_ALGO_SHA256);
$params['sign'] = base64_encode($sig);
$params['sign_type'] = 'RSA';
// 3. 校验平台响应 / 异步通知:用平台公钥
$ok = openssl_verify($content, base64_decode($sign), $platformPublicKey, OPENSSL_ALGO_SHA256);
启用「仅 RSA 安全模式」后该商户的请求必须携带 RSA 系列 sign_type;未启用时仍可继续使用 MD5,两种模式可平滑迁移。兼容模式下 MD5 与 RSA 可同时使用。
四、下单请求参数
pid商户 ID(必填)
type支付方式:alipay / wxpay / qqpay(必填)
out_trade_no商户订单号,需唯一(必填)
name商品名称(必填)
money金额,单位元,两位小数(必填)
notify_url异步通知地址(必填)
return_url支付完成同步跳转地址(可选)
clientip用户 IP(可选)
sign_typeMD5 / RSA / RSA2(可选,默认 MD5)
sign签名(必填)
五、返回示例
{
"code": 0,
"trade_no": "2026110712000193875",
"out_trade_no": "NO20261107001",
"type": "alipay",
"money": "1.00",
"pay_info": "epay://pay?trade_no=...",
"payurl": "当前域名/cashier?trade_no=...",
"timestamp": "1794031380",
"sign_type": "MD5",
"sign": "平台签名"
}
响应为平铺结构(非 data 包装),与老系统保持一致;RSA 请求时 sign_type 为 RSA,请用平台公钥验签。
六、PHP 接入示例(MD5 兼容模式)
$params = [
'pid' => 1000, 'type' => 'alipay',
'out_trade_no' => 'NO' . time(),
'notify_url' => 'https://example.com/notify.php',
'return_url' => 'https://example.com/return.php',
'name' => '测试商品', 'money' => '1.00',
'clientip' => $_SERVER['REMOTE_ADDR'],
];
ksort($params);
$str = '';
foreach ($params as $k => $v) {
if ($v === '' || is_array($v)) continue;
$str .= $k . '=' . $v . '&';
}
$params['sign'] = md5(rtrim($str, '&') . $key);
$params['sign_type'] = 'MD5';
七、异步通知
支付成功后平台会向 notify_url 发起 GET/POST 通知,参数含 trade_no、out_trade_no、money、sign 等。MD5 模式商户用商户密钥校验 MD5 签名,RSA 模式商户用平台公钥校验 RSA 签名,做幂等处理后返回纯文本 success。