2 qq 35095295 qq_35095295 于 2017.01.04 15:40 提问

手机端支付宝的异步回调 20C

异步回调接收的sign值跟加密的sign不相等,接收到的值怎么处理才能使两者相等,在线等

3个回答

qiufengwuqing123
qiufengwuqing123   2017.01.04 16:00

异步回调的数据是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;
}
qq_35095295
qq_35095295 排序拼接加密,再去对比两个就是不相等,能帮我看一下参数哪有问题吗
11 个月之前 回复
qq_35095295
qq_35095295   2017.01.04 16:27

该做的都做了,就是两者的值不一样

qq_35095295
qq_35095295   2017.01.04 16:52

排序拼接之后的字符串:
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&notify_id=8631a212a4391d15efd789cf3b143f7l0m&notify_time=2017-01-04 16:37:58&notify_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

qq_35095295
qq_35095295 回复奋斗_Qsheng: 订单支付是成功的,
11 个月之前 回复
qiufengwuqing123
qiufengwuqing123 个人建议:1、先到支付宝后台查看订单是否支付成功;2、把返回的参数记录起来;3、把这些参数套进去程序里面,一步步往下走应该就可以发现
11 个月之前 回复
qiufengwuqing123
qiufengwuqing123 个人建议:1、先到支付宝后台查看订单是否支付成功
11 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片