通知参数按 固定顺序 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,否则系统会重试
?>
收款成功后系统以 POST JSON 请求 notify_url:
{"trans_id":"平台订单号","out_trade_no":"商户订单号","total_fee":"订单金额","order_status":"OD","transaction_id":"平台订单号","timestamp":秒级时间戳,"attach":"透传参数","hash":"签名"}
order_status=OD 表示已支付;attach 为下单时传入的透传字段。
过滤空值与 hash 字段,剩余字段按 key ASCII 升序拼接,追加通讯密钥后计算:hash = md5(参数字典序串 . 商户密钥)。
验签并完成业务后,响应内容必须包含 success,否则系统判定通知失败并重试。
收款成功后系统以 GET 请求 notify_url,参数:money(实付金额)、price(订单金额)、pay_id(商户订单号)、param(透传)、type(1支付宝/2QQ/3微信)、pay_no(平台订单号)、out_time(秒级时间戳)、status=1、sign、sign_type=MD5。
过滤空值和 sign/sign_type 后按 key ASCII 升序拼接并追加通讯密钥:sign = md5(参数字典序串 . 商户密钥)。
验签通过并完成业务后响应 success;status=1 表示已支付。
收款成功后系统以 POST JSON 请求 notify_url。业务字段与易支付回调一致:pid / type / out_trade_no / trade_no / name / money / trade_status=TRADE_SUCCESS / timestamp,另携带 sign 和 sign_type(按官方V2约定携带 timestamp,供时效校验)。
过滤空值与 sign/sign_type,其余字段按 key ASCII 升序拼接为签名串;使用后台“查看对接密钥”中提供的平台公钥执行 RSA 验签。RSA2 对应 SHA256withRSA,RSA 对应 SHA1withRSA。
验签通过后完成业务并响应包含 success 的内容,系统才判定通知成功。