通知参数按 固定顺序 payId → param → type → price → reallyPrice 拼接,末尾追加通讯密钥,取 MD5 小写:
sign = md5(payId . param . type . price . reallyPrice . 密钥)
注意:V免签为固定顺序拼接(区别于易支付字典序),param 为空时按空串参与。
<?php
if($_POST){
$data=$_POST;
}else{
$data=$_GET;
}
ksort($data); //排序post参数
reset($data); //内部指针指向数组中的第一个元素
$zzcode_key = "这里改成您的KEY"; //这是您的密钥
$sign = '';//初始化
foreach ($data AS $key => $val) { //遍历POST参数
if ($val == '' || $key == 'sign' || $key == "sign_type" ) continue; //跳过这些不参数签名
if ($sign) $sign .= '&'; //第一个字符串签名不加& 其他加&连接起来参数
$sign .= "$key=$val"; //拼接为url参数形式
}
if (md5($sign.$zzcode_key) !== $data['sign']) { //不合法的数据
exit('fail'); //验证失败
} else { //合法的数据
//业务处理
$money = (float)$data['money']; //付款金额
$trade_no = $data['trade_no']; //订单号
$out_trade_no = $data['out_trade_no']; //商户订单号
exit('success'); //返回成功
}
?>
与易支付通知并存,按 V免签 固定顺序签名。订单收款后系统以 GET 请求商户 notifyUrl,参数如下:
通知参数按 固定顺序 payId → param → type → price → reallyPrice 拼接,末尾追加通讯密钥,取 MD5 小写:
sign = md5(payId . param . type . price . reallyPrice . 密钥)
注意:V免签为固定顺序拼接(区别于易支付字典序),param 为空时按空串参与。
商户验签通过并完成自身业务后,须向系统输出纯字符串 success。成功判定:响应内容包含 success 即视为通知成功(与易支付一致),否则系统判定通知失败并按规则重试。
同步跳转 returnUrl 的参数、签名与异步通知完全一致,仅响应要求不同(同步无需输出 success)。
<?php
\$data = \$_GET; //通知以 GET 方式送达
\$key = '您的通讯密钥'; //同易支付密钥
//固定顺序签名(注意:与易支付字典序不同)
\$sign = md5(\$data['payId'].\$data['param'].\$data['type'].\$data['price'].\$data['reallyPrice'].\$key);
if (\$sign !== \$data['sign']) {
exit('fail'); //验签失败
}
//验签通过,处理业务
\$payId = \$data['payId']; //商户订单号
\$reallyPrice = \$data['reallyPrice']; //实付金额
exit('success'); //必须输出 success,否则系统会重试
?>