管理后台

统一支付接入文档

一行代码接入支付宝,支持当面付 · 手机网站 · 电脑网站 · 移动APP

当面付手机网站电脑网站移动APP 异步回调MD5签名RSA2验签

🚀 快速开始

  1. 联系管理员获取 app_idapp_key
  2. 调用 创建支付 接口获取二维码/支付链接
  3. 用户扫码或跳转支付宝完成支付
  4. 系统异步通知你的回调地址,同时可主动 查询订单
POST https://pay.j8y.cn/api/gateway.php

所有接口统一入口,通过 act 参数路由

🔐 鉴权方式

所有请求需附带 sign 参数,签名算法为 MD5

// 1. 收集所有参数(不含 sign)
$params = ['app_id' => 'mer_xxx', 'act' => 'create', 'amount' => '9.99', 'subject' => '商品'];

// 2. 按字母排序拼接
ksort($params);
$str = 'act=create&amount=9.99&app_id=mer_xxx&subject=' . urlencode('商品');

// 3. 末尾追加 key
$str .= 'key=' . $app_key;

// 4. MD5
$sign = md5($str);
注意:值为空的参数不参与签名。所有参数值需先 urlencode 再参与拼接。

📋 创建支付订单

POST https://pay.j8y.cn/api/gateway.php act=create

请求参数

参数类型必填说明
app_idstring商户ID,管理员分配
actstring固定值 create
amountfloat支付金额,单位:元,如 9.99
subjectstring商品描述,会展示在支付宝收银台
pay_methodstring可选支付方式:qrcode(当面付)、wap(手机网站)、page(电脑网站)、app(移动APP)。不传使用商户默认
out_trade_nostring可选商户订单号,留空自动生成(格式: PAY + 时间戳)
notify_urlstring可选支付成功回调地址,不传使用商户设置的默认回调URL
return_urlstring可选支付完成跳转地址(仅 wap/page 有效)
signstringMD5签名

📱 当面付 返回示例 qrcode

{
  "ok": true,
  "out_trade_no": "PAY20260517120000abc123",
  "amount": "9.99",
  "pay_method": "qrcode",
  "qr_code": "https://qr.alipay.com/bax03431wmgn...",
  "pay_url": "https://qr.alipay.com/bax03431wmgn..."
}

qr_code 生成二维码,用户用支付宝扫码即可支付。

📲 手机网站 返回示例 wap

{
  "ok": true,
  "out_trade_no": "PAY20260517120000abc123",
  "amount": "9.99",
  "pay_method": "wap",
  "pay_url": "https://mclient.alipay.com/cashier/mobilepay.htm?...
}

将用户重定向到 pay_url,支付宝会自动调起APP或H5收银台。

💻 电脑网站 返回示例 page

{
  "ok": true,
  "out_trade_no": "PAY20260517120000abc123",
  "amount": "9.99",
  "pay_method": "page",
  "pay_url": "https://unitradeprod.alipay.com/appAssign.htm?...
}

将用户重定向到 pay_url,打开支付宝PC收银台。

📲 移动APP 返回示例 app

{
  "ok": true,
  "out_trade_no": "PAY20260517120000abc123",
  "amount": "9.99",
  "pay_method": "app",
  "pay_url": "{支付宝返回的完整订单串}"
}
⚠️ APP支付说明:pay_url 是支付宝返回的完整订单串,需要在移动APP中通过支付宝SDK的 payInterceptorWithUrl 方法传入,由SDK调起支付宝APP完成支付。该接口需先在支付宝开放平台开通「APP支付」产品。

🔍 查询订单

POST https://pay.j8y.cn/api/gateway.php act=query

请求参数

参数类型必填说明
app_idstring商户ID
actstring固定值 query
out_trade_nostring要查询的订单号
signstringMD5签名

返回示例

{
  "ok": true,
  "out_trade_no": "PAY20260517120000abc123",
  "status": "paid",
  "amount": "9.99",
  "subject": "测试商品",
  "pay_method": "qrcode",
  "trade_no": "2026051722001...",
  "paid_at": "2026-05-17 12:05:30"
}

订单状态:pending(待支付)、paid(已支付)、expired(已超时)、canceled(已取消)

📞 支付回调通知

用户支付成功后,系统会 POST 通知商户设置的回调地址:

商户收到的参数

参数说明
out_trade_no商户订单号
trade_no支付宝交易号
amount支付金额(元)
status固定为 paid
paid_at支付时间
可靠性保障:回调失败自动重试最多 3 次,间隔 1 秒。商户回调接口需返回 HTTP 200 表示接收成功。

安全验证:支付宝异步通知系统后,系统已通过 RSA2(SHA256)验签,确保通知来自支付宝官方。商户可通过 trade_no 再次调用查询接口做二次确认。

商户回调处理示例(PHP)

// 接收回调
$out_trade_no = $_POST['out_trade_no'];
$trade_no     = $_POST['trade_no'];
$amount       = $_POST['amount'];
$status       = $_POST['status'];

if ($status === 'paid') {
    // 更新你的订单状态
    // ...
    echo 'success';  // 必须返回 HTTP 200
}

❌ 错误码说明

msg原因
缺少 app_id 或 sign未传必填参数
商户不存在或已停用app_id 无效或商户被禁用
签名验证失败sign 计算错误或 app_key 不匹配
金额必须大于0amount 参数无效
请填写商品描述subject 为空
订单号重复,请勿重复提交同一订单号有 pending 状态的订单
支付宝未配置系统未配置支付宝密钥
未知操作act 参数不是 create/query

📦 完整接入示例(PHP)

// 当面付完整示例
$app_id  = 'mer_xxxxxxxxxx';
$app_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$api     = 'https://pay.j8y.cn/api/gateway.php';

// 构建参数
$params = [
    'app_id'  => $app_id,
    'act'      => 'create',
    'amount'   => '0.01',
    'subject'  => '测试商品',
    'pay_method' => 'qrcode',
];

// 计算签名
ksort($params);
$str = '';
foreach ($params as $k => $v) {
    if ($v === '') continue;
    $str .= $k . '=' . $v . '&';
}
$str .= 'key=' . $app_key;
$params['sign'] = md5($str);

// 发送请求
$ch = curl_init($api);
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => http_build_query($params),
    CURLOPT_RETURNTRANSFER => true,
]);
$resp = curl_exec($ch);
curl_close($ch);

$result = json_decode($resp, true);
if ($result['ok']) {
    echo "二维码: " . $result['qr_code'];
}

有问题联系管理员 | 管理后台