Rumah >pembangunan bahagian belakang >tutorial php >如何对 微信支付 结果通知的内容做 签名验证?
我已经收到腾讯返回的数据了,但要对其进行签名经验证,以保证数据没有被人篡改,然后在做相应的逻辑处理。
这个签名验证是如何做的?
做签名的参数有那些?
参数名和参数值是怎样填写的?
这是我做签名的代码:
<code> ///验证签名 $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);//调用签名函数</code>
我的签名函数:
<code> /** * 生成签名 * @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; } </code>
$wx_sign_all 的值与 返回来的sign值不一样啊!
验签是把自己生成的sign与返回来的sign对比吗?
///////////////////////////问题已经解决//////////////////////
马虎写错了一个值
我已经收到腾讯返回的数据了,但要对其进行签名经验证,以保证数据没有被人篡改,然后在做相应的逻辑处理。
这个签名验证是如何做的?
做签名的参数有那些?
参数名和参数值是怎样填写的?
这是我做签名的代码:
<code> ///验证签名 $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);//调用签名函数</code>
我的签名函数:
<code> /** * 生成签名 * @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; } </code>
$wx_sign_all 的值与 返回来的sign值不一样啊!
验签是把自己生成的sign与返回来的sign对比吗?
///////////////////////////问题已经解决//////////////////////
马虎写错了一个值
<code>$wx_sign['sign'] = $wxdata['sign']; $wx_sign_all = $this->wechatAppPay->MakeSign($wx_sign);//调用签名函数</code>
这里会把sign
也加入签名串里面吧,sign
应该是不参与签名的。