异步回调接收的sign值跟加密的sign不相等,接收到的值怎么处理才能使两者相等,在线等
异步回调的数据是post形式的数组,基本思想是先把接收的数据去掉空值和签名参数,进行排序后生成字符串拼上配置的key时进行对应的加密,然后再与返回的sign匹配。
支付宝对应的demo包验签函数:
function getSignVeryfy($para_temp, $sign) {
//除去待签名参数数组中的空值和签名参数
$para_filter = paraFilter($para_temp);
//对待签名参数数组排序
$para_sort = argSort($para_filter);
//把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
$prestr = createLinkstring($para_sort);
$isSgin = false;
switch (strtoupper(trim($this->alipay_config['sign_type']))) {
case "MD5" :
$isSgin = md5Verify($prestr, $sign, $this->alipay_config['key']);
break;
default :
$isSgin = false;
}
return $isSgin;
}
该做的都做了,就是两者的值不一样
排序拼接之后的字符串:
buyer_email=***@qq.com&buyer_id=2088112986139655&code=alipay&gmt_create=2017-01-04 16:37:57&gmt_payment=2017-01-04 16:37:57&is_t
otal_fee_adjust=N¬ify_id=8631a212a4391d15efd789cf3b143f7l0m¬ify_time=2017-01-04 16:37:58¬ify_type=trade_status_sync&out_trade_
no=2017010416744O2740&payment_type=1&price=1.00&quantity=1&seller_email=***&seller_id=2088121689618866&subject=201701
0416744&total_fee=1.00&trade_no=2017010421001004650259639555&trade_status=TRADE_SUCCESS&use_coupon=Nr2hnegaflj7ab6y6v4g2k0vien01ogi9