wqhy.cloud 码支付商户对接文档
当前网关地址:https://demo.wqhy.cloud
对接时一律使用当前页面显示的域名,不要使用服务器 IP 地址。每个客户使用自己的子域名、后台账号、数据库、PID 和商户密钥,不要把不同客户的子域名和密钥混用。
1. 客户需要填写什么
| 字段 | 填写值 |
|---|---|
| 网关地址/API 接口 | https://demo.wqhy.cloud,不要填写 http://39.97.53.231 |
| 页面支付接口 | https://demo.wqhy.cloud/submit.php |
| API 下单接口 | https://demo.wqhy.cloud/mapi.php |
| 后台地址 | https://demo.wqhy.cloud/User/login |
| 商户 PID | 登录后台首页,在“支付API配置”里复制;新独立租户默认是 1000。 |
| 商户密钥 | 登录后台首页,在“支付API配置”里复制“商户密钥”。 |
| 签名方式 | MD5 |
| notify_url | 商户系统接收异步通知的地址,例如 https://merchant.com/pay/notify。 |
| return_url | 用户支付完成后跳回商户系统的地址,例如 https://merchant.com/pay/return。 |
2. 下单接口
页面支付使用 https://demo.wqhy.cloud/submit.php,支持 GET 或 POST,请求成功后跳转到收银台。
API 下单使用 https://demo.wqhy.cloud/mapi.php,只支持 POST,请求成功后返回 JSON,商户系统跳转到返回的 payurl。
| 参数 | 必填 | 示例 | 说明 |
|---|---|---|---|
pid |
是 | 1000 |
商户 PID。 |
type |
是 | alipay / wxpay / unionpay |
支付类型。 |
out_trade_no |
是 | ORDER202606160001 |
商户订单号,必须唯一。 |
notify_url |
是 | https://merchant.com/pay/notify |
异步通知地址。 |
return_url |
是 | https://merchant.com/pay/return |
支付完成跳转地址。 |
name |
是 | 测试商品 |
商品名称。 |
money |
是 | 9.90 |
订单金额,单位元。 |
sign_type |
是 | MD5 |
固定填写 MD5。 |
sign |
是 | 202cb962... |
按第 3 节生成。 |
param |
否 | vip |
商户扩展参数,回调时带回。 |
3. MD5 签名规则
签名规则与源码保持一致:
所有参数按参数名升序排序,排除 sign、sign_type 和空值,拼接成 参数名=参数值&参数名=参数值,最后直接追加商户密钥,然后计算小写 MD5。
money=9.90&name=测试商品¬ify_url=https://merchant.com/pay/notify&out_trade_no=ORDER202606160001&pid=1000&return_url=https://merchant.com/pay/return&type=alipay商户密钥
最终:sign = md5(上面的字符串)
4. PHP 下单示例
<?php
function mpaySign(array $params, string $key): string
{
ksort($params);
$parts = [];
foreach ($params as $name => $value) {
if ($name === 'sign' || $name === 'sign_type' || $value === '') {
continue;
}
$parts[] = $name . '=' . $value;
}
return md5(implode('&', $parts) . $key);
}
$apiBase = 'https://demo.wqhy.cloud';
$key = '这里填写后台显示的商户密钥';
$params = [
'pid' => '1000',
'type' => 'alipay',
'out_trade_no' => 'ORDER' . date('YmdHis'),
'notify_url' => 'https://merchant.com/pay/notify',
'return_url' => 'https://merchant.com/pay/return',
'name' => '测试商品',
'money' => '9.90',
'sign_type' => 'MD5',
];
$params['sign'] = mpaySign($params, $key);
header('Location: ' . $apiBase . '/submit.php?' . http_build_query($params));
exit;
5. API 下单返回
{
"code": 1,
"msg": "订单创建成功",
"trade_no": "H2026061600011234",
"payurl": "https://demo.wqhy.cloud/Pay/console/H2026061600011234"
}
如果 code 等于 1,商户系统跳转到 payurl 即可。
6. 异步通知
支付成功后,系统会用 GET 请求商户填写的 notify_url,并带上订单参数和签名。
| 参数 | 说明 |
|---|---|
pid |
商户 PID。 |
trade_no |
平台订单号。 |
out_trade_no |
商户订单号。 |
type |
支付类型。 |
money |
订单金额。 |
trade_status |
成功时为 TRADE_SUCCESS。 |
sign |
通知签名,按同样规则验签。 |
商户系统验签、核对订单号和金额、更新订单状态后,必须输出纯文本 success。不能返回 JSON、HTML 或多余文字。
7. 后台配置提醒
客户登录后台后,需要先添加收款账号和收款码。没有可用收款通道时,下单会提示“用户无可用收款账号”或“用户账号无可用收款码”。
服务器在中国大陆时,域名访问通常需要 ICP 备案。未备案时,IP 可能能访问,但域名可能被服务商拦截。