Pay Sandbox 测试补单沙箱

下游对接文档

本系统为测试补单沙箱:接收下单请求后,按商户配置的延迟与成功率自动回调。不涉及真实资金。

1. 签名算法(MD5)

  1. 参与签名的参数去除 sign 本身
  2. 空值不参与签名
  3. 按参数名 ASCII 升序排序
  4. 拼接为 k1=v1&k2=v2&...&key=商户私钥
  5. sign = md5(拼接串),小写 32 位
示例原文:
amount=1.00&body=测试&merchant_no=M001&notify_url=https://example.com/n&out_trade_no=T1001&title=商品&key=你的私钥
sign = md5(上述原文)

2. 创建订单

POST /api/create_order.php(form 或 JSON)

参数必填说明
merchant_no是商户号
title是订单标题
body否订单信息
out_trade_no是商户单号(商户内唯一)
amount是支付金额,元,最多两位小数
notify_url是异步回调地址 http/https
sign是MD5 签名

平台单号即渠道单号(28位纯数字)。成功后返回 pay_url 空白支付页;系统会按商户“自动访问延迟”访问该链接开启补单,再按补单延迟与成功率回调。

{
  "code": 0,
  "msg": "accepted",
  "data": {
    "order_no": "2026101523001457951455284631",
    "out_trade_no": "T1001",
    "amount": "1.00",
    "status": 0,
    "status_text": "waiting_open",
    "pay_url": "http://你的域名/pay.php?no=2026101523001457951455284631",
    "auto_open_at": "2026-11-02 12:00:05",
    "auto_open_seconds": 5
  }
}

3. 异步回调(平台 → 商户)

平台在计划时间 POST 到 notify_url(application/x-www-form-urlencoded)

参数说明
merchant_no商户号
order_no平台单号(即渠道单号,28位纯数字)
out_trade_no商户单号
title / body / amount订单信息
trade_statusSUCCESS 或 FAIL
timestampUnix 时间戳
signMD5 签名

商户验签通过后请返回纯文本 success(不区分大小写)。否则最多再通知 3 次,仍失败则停止通知。

本地可把 notify_url 指到 /api/demo_notify.php 做联调。

4. PHP 签名示例

function sandbox_sign(array $params, string $key): string {
    unset($params['sign']);
    ksort($params);
    $parts = [];
    foreach ($params as $k => $v) {
        if ($v === '' || $v === null) continue;
        $parts[] = $k . '=' . $v;
    }
    return md5(implode('&', $parts) . '&key=' . $key);
}