支付接口开发文档

本协议同时支持 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=测试商品&notify_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。

© 2026 AX钱包-专注数字支付平台 · ThinkPHP 8