首頁 > 後端開發 > php教程 > 如何對 微信支付 結果通知的內容做 簽名驗證?

如何對 微信支付 結果通知的內容做 簽名驗證?

WBOY
發布: 2016-09-11 11:34:05
原創
2678 人瀏覽過

如何對 微信支付 結果通知的內容做 簽名驗證?

我已經收到騰訊回傳的資料了,但要對其進行簽名經驗證,以保證資料沒有被人篡改,然後在做相應的邏輯處理。
這個簽章驗證是如何做的?
做簽章的參數有那些?
參數名和參數值是怎麼填入的?

這是我做簽名的程式碼:

<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應該是不參與簽名的。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板