| 请求数据格式 | application/x-www-form-urlencoded(POST) |
| 响应数据格式 | JSON |
| 签名算法 | MD5(默认)/ RSA |
| 字符编码 | UTF-8 |
| 时间戳要求 | 10 位 Unix 时间戳,误差不超过 300 秒 |
把用户浏览器重定向到支付页面,用户在支付页扫码付款,完成后跳回商户网站。
URL 地址:https://www.zhongnianfu.com/submit.php
请求方式:POST 或 GET
请求参数说明:
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 商户ID | pid | 是 | Int | 1000 | |
| 支付方式 | type | 是 | String | alipay | 支付方式列表 |
| 商户订单号 | out_trade_no | 是 | String | ORDER20260629001 | 字母数字下划线横线竖线 |
| 异步通知地址 | notify_url | 是 | String | https://your-site.com/notify.php | 服务器异步通知 |
| 跳转通知地址 | return_url | 是 | String | https://your-site.com/return.php | 支付完成跳转地址 |
| 商品名称 | name | 是 | String | 测试商品 | 超过127字节自动截断 |
| 商品金额 | money | 是 | String | 0.01 | 单位:元,最多2位小数 |
| 业务扩展参数 | param | 否 | String | 支付后原样返回 | |
| 时间戳 | timestamp | 是 | String | 1721206072 | 10位整数,单位秒 |
| 签名字符串 | sign | 是 | String | 签名规则 | |
| 签名类型 | sign_type | 是 | String | MD5 | 默认MD5 |
用户浏览器会被重定向到支付页面,支付完成后跳回 return_url。
PHP 示例:
<?php
$params = [
'pid' => '1000',
'type' => 'alipay',
'out_trade_no' => 'ORDER' . date('YmdHis'),
'notify_url' => 'https://your-site.com/notify.php',
'return_url' => 'https://your-site.com/return.php',
'name' => '测试商品',
'money' => '0.01',
'timestamp' => (string)time(),
];
$key = 'YOUR_MERCHANT_KEY';
ksort($params);
$sign_str = '';
foreach ($params as $k => $v) { $sign_str .= $k . '=' . $v . '&'; }
$sign_str = rtrim($sign_str, '&') . $key;
$params['sign'] = md5($sign_str);
$params['sign_type'] = 'MD5';
header('Location: https://www.zhongnianfu.com/submit.php?' . http_build_query($params));
服务器端发起支付请求,返回支付二维码链接或跳转 URL,适合程序化对接。
URL 地址:https://www.zhongnianfu.com/mapi.php 或 https://www.zhongnianfu.com/api/pay/create
请求方式:POST
请求参数说明:
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 商户ID | pid | 是 | Int | 1000 | |
| 接口类型 | method | 是 | String | web | web/jump/jsapi/app/scan/applet |
| 支付方式 | type | 是 | String | alipay | 支付方式列表 |
| 商户订单号 | out_trade_no | 是 | String | ORDER20260629001 | |
| 异步通知地址 | notify_url | 是 | String | https://your-site.com/notify.php | |
| 跳转通知地址 | return_url | 否 | String | https://your-site.com/return.php | API模式下不强制要求 |
| 商品名称 | name | 是 | String | 测试商品 | |
| 商品金额 | money | 是 | String | 0.01 | 单位:元 |
| 用户IP地址 | clientip | 是 | String | 192.168.1.100 | 用户发起支付的IP |
| 设备类型 | device | 否 | String | pc | pc/mobile/wechat/alipay/qq |
| 业务扩展参数 | param | 否 | String | 支付后原样返回 | |
| 被扫授权码 | auth_code | 否 | String | 仅 method=scan 时需要 | |
| 用户Openid | sub_openid | 否 | String | 仅 method=jsapi 时需要 | |
| 应用AppId | sub_appid | 否 | String | 仅JSAPI微信支付时需要 | |
| 时间戳 | timestamp | 是 | String | 1721206072 | 10位整数,单位秒 |
| 签名字符串 | sign | 是 | String | 签名规则 | |
| 签名类型 | sign_type | 是 | String | MD5 | 默认MD5 |
返回参数(JSON):
| 字段名 | 变量名 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|
| 返回状态码 | code | Int | 0 | 0=成功,其他=失败 |
| 错误信息 | msg | String | 失败时返回原因 | |
| 平台订单号 | trade_no | String | 2026062520334130268 | |
| 发起支付类型 | pay_type | String | qrcode | jump/qrcode/jsapi/app/scan/html |
| 发起支付参数 | pay_info | String | weixin://wxpay/bizpayurl?pr=xxx | 根据pay_type不同内容也不同 |
| 时间戳 | timestamp | String | 响应时间戳 | |
| 签名字符串 | sign | String | RSA签名,用平台公钥验签 | |
| 签名类型 | sign_type | String | RSA | 固定RSA |
响应中的 sign 使用平台 RSA 私钥签名,商户需用平台公钥验签。pay_type=qrcode 时 pay_info 为二维码内容,pay_type=jump 时直接跳转。
PHP 示例:
<?php
$params = [
'pid' => '1000',
'method' => 'web',
'type' => 'alipay',
'out_trade_no' => 'ORDER' . date('YmdHis'),
'notify_url' => 'https://your-site.com/notify.php',
'name' => '测试商品',
'money' => '0.01',
'clientip' => $_SERVER['REMOTE_ADDR'],
'device' => 'pc',
'timestamp' => (string)time(),
];
$key = 'YOUR_MERCHANT_KEY';
ksort($params);
$sign_str = '';
foreach ($params as $k => $v) { $sign_str .= $k . '=' . $v . '&'; }
$sign_str = rtrim($sign_str, '&') . $key;
$params['sign'] = md5($sign_str);
$params['sign_type'] = 'MD5';
$ch = curl_init('https://www.zhongnianfu.com/mapi.php');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = json_decode(curl_exec($ch), true);
// $response['pay_type'] 决定前端展示方式
// $response['pay_info'] 为二维码内容或跳转URL
平台向商户 notify_url 发送 GET 请求,通知支付结果。
| 字段名 | 变量名 | 类型 | 描述 |
|---|---|---|---|
| 商户ID | pid | Int | |
| 平台订单号 | trade_no | String | |
| 商户订单号 | out_trade_no | String | |
| 接口订单号 | api_trade_no | String | 微信/支付宝返回的单号 |
| 支付方式 | type | String | alipay/wxpay/qqpay |
| 交易状态 | trade_status | String | 固定 TRADE_SUCCESS |
| 商品名称 | name | String | |
| 商品金额 | money | String | |
| 业务扩展参数 | param | String | |
| 支付用户标识 | buyer | String | 一般为openid |
| 时间戳 | timestamp | String | |
| 签名字符串 | sign | String | RSA签名 |
| 签名类型 | sign_type | String | 固定RSA |
商户收到通知后必须返回纯文本 success,否则平台会重试(2分钟-3分钟-20分钟-1小时-2小时衰减)。务必对 sign 验签,并判断 trade_status 是否等于 TRADE_SUCCESS。
URL 地址:https://www.zhongnianfu.com/api/pay/query
请求方式:POST
| 字段名 | 变量名 | 必填 | 类型 | 描述 |
|---|---|---|---|---|
| 商户ID | pid | 是 | Int | |
| 平台订单号 | trade_no | 二选一 | String | 与 out_trade_no 必传其一 |
| 商户订单号 | out_trade_no | 二选一 | String | 与 trade_no 必传其一 |
| 时间戳 | timestamp | 是 | String | 10位整数 |
| 签名字符串 | sign | 是 | String | |
| 签名类型 | sign_type | 是 | String | MD5 |
返回字段:code, trade_no, out_trade_no, api_trade_no, type, status(0=未支付/1=已支付/2=已退款), money, name, buyer, addtime, endtime, param
URL 地址:https://www.zhongnianfu.com/api/merchant/info
请求方式:POST
| 字段名 | 变量名 | 必填 | 类型 | 描述 |
|---|---|---|---|---|
| 商户ID | pid | 是 | Int | |
| 时间戳 | timestamp | 是 | String | 10位整数 |
| 签名字符串 | sign | 是 | String | |
| 签名类型 | sign_type | 是 | String | MD5 |
返回字段:code, pid, status, pay_status, settle_status, money, order_num, order_num_today
URL 地址:https://www.zhongnianfu.com/api/pay/refund
请求方式:POST
| 字段名 | 变量名 | 必填 | 类型 | 描述 |
|---|---|---|---|---|
| 商户ID | pid | 是 | Int | |
| 平台订单号 | trade_no | 二选一 | String | |
| 商户订单号 | out_trade_no | 二选一 | String | |
| 退款金额 | money | 是 | String | 单位:元 |
| 时间戳 | timestamp | 是 | String | |
| 签名字符串 | sign | 是 | String | |
| 签名类型 | sign_type | 是 | String | MD5 |
相关接口:https://www.zhongnianfu.com/api/pay/refundquery(退款查询)、https://www.zhongnianfu.com/api/pay/close(关闭订单)
1. 收集所有非空请求参数,排除 sign、sign_type 字段
2. 按参数名 ASCII 码升序排序
3. 拼接成 "参数=参数值" 格式,用 & 连接
4. 末尾拼接商户密钥 key
5. 对整个字符串取 MD5(32位小写)
// 示例 $params = ['pid'=>'1000', 'type'=>'alipay', 'out_trade_no'=>'ORDER001', 'money'=>'0.01', 'timestamp'=>'1721206072']; ksort($params); $sign_str = 'money=0.01&out_trade_no=ORDER001&pid=1000×tamp=1721206072&type=alipay' . $key; $sign = md5($sign_str);
1. 同上步骤 1-2 获取待签名字符串
2. 使用商户 RSA 私钥对待签名字符串计算 SHA256WithRSA 签名
3. 请求时 sign_type 填 RSA
4. 响应验签时使用平台 RSA 公钥
当前默认使用 MD5 签名。如需 RSA 签名,请联系管理员为商户配置密钥对。
| 调用值 | 描述 |
|---|---|
| alipay | 支付宝 |
| wxpay | 微信支付 |
| qqpay | QQ钱包 |
| bank | 网银支付 |
| jdpay | 京东支付 |
以下接口使用 GET 方式,直接用 pid + key 鉴权,不需要 timestamp 和 sign。适合快速调试和简单场景。
| 功能 | URL | 参数 |
|---|---|---|
| 查询商户信息 | https://www.zhongnianfu.com/api.php?act=query | pid, key |
| 查询订单 | https://www.zhongnianfu.com/api.php?act=order | pid, key, trade_no 或 out_trade_no |
| 查询订单列表 | https://www.zhongnianfu.com/api.php?act=orders | pid, key, limit(默认10), offset(默认0), status(可选) |
| 查询结算记录 | https://www.zhongnianfu.com/api.php?act=settle | pid, key, limit(默认10), offset(默认0) |
示例:https://www.zhongnianfu.com/api.php?act=query&pid=1000&key=YOUR_KEY
旧版 API 无时间戳校验,安全性较低,生产环境建议使用新版 API。