如果在 order_buy 下单接口中传入了 notify_url 参数,当订单的交付状态发生改变时(如发货完成或成功退款),主站服务器将主动向该地址发送异步通知。
回调采用 POST 方式,数据格式为表单(application/x-www-form-urlencoded)。
| 参数 | 类型 | 说明 |
|---|---|---|
order_id | string | 主站的系统订单号 |
out_trade_no | string | 你下单时传入的商户订单号 |
status | string | 交付状态:"2" = 已发货/已完成,"3" = 已退款 |
content | string | 发货卡密/交付内容。退款事件时为空字符串 |
timestamp | string | 回调触发的 Unix 时间戳 |
sign | string | 安全签名,用于验证此通知来自主站。算法详见下方说明 |
为了防止假冒通知,强烈建议你在接收回调时校验签名 sign:
sign 外)。key1=value1&key2=value2&... 的格式拼接。&key=YOUR_API_KEY。sign 参数进行比对,一致则说明通知真实可信。<?php
// 1. 获取所有 POST 参数
$params = $_POST;
$sign = $params['sign'] ?? '';
unset($params['sign']); // 剔除 sign 参数
// 2. 升序排序
ksort($params);
// 3. 拼接参数
$signStr = '';
foreach ($params as $k => $v) {
$signStr .= $k . '=' . $v . '&';
}
// 4. 追加你的 API Key
$myApiKey = 'YOUR_API_KEY';
$signStr .= 'key=' . $myApiKey;
// 5. 校验 MD5 值
if (md5($signStr) === $sign) {
// 签名验证通过,处理订单状态
$outTradeNo = $_POST['out_trade_no'];
$status = (int)$_POST['status'];
$content = $_POST['content']; // 卡密内容
if ($status === 2) {
// 更新本地订单为已发货,存储卡密 $content
} elseif ($status === 3) {
// 更新本地订单为已退款
}
// 必须响应 "ok" 告知主站成功接收,否则主站可能会重试
echo "ok";
} else {
// 签名错误
header("HTTP/1.1 400 Bad Request");
echo "sign_error";
}
ok (不包含 HTML 标签)。如果输出其他内容,主站会记录为回调异常。