事件推送(Webhook)

在商户中心「个人设置」配置 事件推送地址(event_webhook) 后,订单生命周期变化会以 JSON POST 推送到该地址(HTTPS 公网地址,平台禁止推送目标为内网)。

支持的事件

order.paid     支付成功(含管理员补单)
order.expired  订单超时未支付
order.refunded 订单已退款

报文格式

{
  "event": "order.paid",
  "trade_no": "202610151234567890123456",
  "out_trade_no": "商户订单号",
  "type": "alipay",
  "name": "商品名称",
  "money": "10.00",
  "timestamp": 1728950400,
  "sign": "md5签名",
  "sign_type": "MD5"
}

不同事件携带的字段略有差异:order.paid 含 name/money;order.refunded 含 refund_amount;order.expired 仅基础字段。

验签方式

与接口签名一致:对报文中除 sign/sign_type 外的全部字段(空值剔除)按 ASCII 升序拼 a=b&c=d,末尾拼接商户密钥取 MD5,与报文中 sign 比对(小写)。PHP 示例:

unset($_POST['sign'], $_POST['sign_type']);
$pairs = [];
foreach ($_POST as $k => $v) { if ($v !== "") { $pairs[] = "$k=$v"; } }
sort($pairs);
$raw = implode("&", $pairs) . $key;
if (md5($raw) !== $_POST['sign']) { die("verify fail"); }

注意事项

· 推送为单次尝试(10 秒超时),请保证地址公网可达、快速响应;· 未投递成功不影响入账,请以 api.php 查询或异步通知为准做兜底;· 同一订单的重复事件请以 trade_no 幂等处理。