如何对 微信支付 结果通知的内容做 签名验证?
程序员文章站
2022-06-03 21:57:48
...
我已经收到腾讯返回的数据了,但要对其进行签名经验证,以保证数据没有被人篡改,然后在做相应的逻辑处理。
这个签名验证是如何做的?
做签名的参数有那些?
参数名和参数值是怎样填写的?
这是我做签名的代码:
///验证签名
$wx_sign = array();//微信给返回的数据加入一个数组做签名
$wx_sign['appid'] = $wxdata['appid'];
$wx_sign['bank_type'] = $wxdata['bank_type'];
$wx_sign['cash_fee'] = $wxdata['cash_fee'];
$wx_sign['fee_type'] = $wxdata['fee_type'];
$wx_sign['is_subscribe'] = $wxdata['is_subscribe'];
$wx_sign['mch_id'] = $wxdata['mch_id'];
$wx_sign['nonce_str'] = $wxdata['nonce_str'];
$wx_sign['openid'] = $wxdata['openid'];
$wx_sign['out_trade_no'] = $wxdata['out_trade_no'];
$wx_sign['result_code'] = $wxdata['result_code'];
$wx_sign['return_code'] = $wxdata['return_code'];
$wx_sign['time_end'] = $wxdata['time_end'];
$wx_sign['total_fee'] = $wxdata['total_fee'];
$wx_sign['trade_type'] = $wxdata['trade_type'];
$wx_sign['transaction_id'] = $wxdata['transaction_id'];
$wx_sign_all = $this->wechatAppPay->MakeSign($wx_sign);//调用签名函数
我的签名函数:
/**
* 生成签名
* @return 签名
*/
public function MakeSign( $params ){
//签名步骤一:按字典序排序数组参数
ksort($params);
$string = $this->ToUrlParams($params);
//签名步骤二:在string后加入KEY
$string = $string . "&key=".$this->key;
//签名步骤三:MD5加密
$string = md5($string);
//签名步骤四:所有字符转为大写
$result = strtoupper($string);
return $result;
}
$wx_sign_all 的值与 返回来的sign值不一样啊!
验签是把自己生成的sign与返回来的sign对比吗?
///////////////////////////问题已经解决//////////////////////
马虎写错了一个值
回复内容:
我已经收到腾讯返回的数据了,但要对其进行签名经验证,以保证数据没有被人篡改,然后在做相应的逻辑处理。
这个签名验证是如何做的?
做签名的参数有那些?
参数名和参数值是怎样填写的?
这是我做签名的代码:
///验证签名
$wx_sign = array();//微信给返回的数据加入一个数组做签名
$wx_sign['appid'] = $wxdata['appid'];
$wx_sign['bank_type'] = $wxdata['bank_type'];
$wx_sign['cash_fee'] = $wxdata['cash_fee'];
$wx_sign['fee_type'] = $wxdata['fee_type'];
$wx_sign['is_subscribe'] = $wxdata['is_subscribe'];
$wx_sign['mch_id'] = $wxdata['mch_id'];
$wx_sign['nonce_str'] = $wxdata['nonce_str'];
$wx_sign['openid'] = $wxdata['openid'];
$wx_sign['out_trade_no'] = $wxdata['out_trade_no'];
$wx_sign['result_code'] = $wxdata['result_code'];
$wx_sign['return_code'] = $wxdata['return_code'];
$wx_sign['time_end'] = $wxdata['time_end'];
$wx_sign['total_fee'] = $wxdata['total_fee'];
$wx_sign['trade_type'] = $wxdata['trade_type'];
$wx_sign['transaction_id'] = $wxdata['transaction_id'];
$wx_sign_all = $this->wechatAppPay->MakeSign($wx_sign);//调用签名函数
我的签名函数:
/**
* 生成签名
* @return 签名
*/
public function MakeSign( $params ){
//签名步骤一:按字典序排序数组参数
ksort($params);
$string = $this->ToUrlParams($params);
//签名步骤二:在string后加入KEY
$string = $string . "&key=".$this->key;
//签名步骤三:MD5加密
$string = md5($string);
//签名步骤四:所有字符转为大写
$result = strtoupper($string);
return $result;
}
$wx_sign_all 的值与 返回来的sign值不一样啊!
验签是把自己生成的sign与返回来的sign对比吗?
///////////////////////////问题已经解决//////////////////////
马虎写错了一个值
$wx_sign['sign'] = $wxdata['sign'];
$wx_sign_all = $this->wechatAppPay->MakeSign($wx_sign);//调用签名函数
这里会把sign
也加入签名串里面吧,sign
应该是不参与签名的。