Heim >Backend-Entwicklung >PHP-Tutorial >Wie führe ich eine Signaturüberprüfung des Inhalts der WeChat-Zahlungsergebnisbenachrichtigung durch?

Wie führe ich eine Signaturüberprüfung des Inhalts der WeChat-Zahlungsergebnisbenachrichtigung durch?

WBOY
WBOYOriginal
2016-09-11 11:34:052661Durchsuche

Wie führe ich eine Signaturüberprüfung des Inhalts der WeChat-Zahlungsergebnisbenachrichtigung durch?

Ich habe die von Tencent zurückgegebenen Daten erhalten, muss jedoch die Signatur überprüfen, um sicherzustellen, dass die Daten nicht manipuliert wurden, und dann die entsprechende logische Verarbeitung durchführen.
Wie erfolgt diese Signaturüberprüfung?
Was sind die Parameter zum Signieren?
Wie gebe ich den Parameternamen und den Parameterwert ein?

Das ist mein Signaturcode:

<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>

Meine Signaturfunktion:

<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>

Der Wert von $wx_sign_all unterscheidet sich vom zurückgegebenen Vorzeichenwert!
Erfolgiert die Signaturüberprüfung durch den Vergleich des selbst erstellten Zeichens mit dem zurückgegebenen Zeichen?

///////////////////////////Das Problem wurde gelöst////////////// //// /////

Ich habe versehentlich einen falschen Wert geschrieben

Antwortinhalt:

Wie führe ich eine Signaturüberprüfung des Inhalts der WeChat-Zahlungsergebnisbenachrichtigung durch?

Ich habe die von Tencent zurückgegebenen Daten erhalten, muss jedoch die Signatur überprüfen, um sicherzustellen, dass die Daten nicht manipuliert wurden, und dann die entsprechende logische Verarbeitung durchführen.
Wie erfolgt diese Signaturüberprüfung?
Was sind die Parameter zum Signieren?
Wie gebe ich den Parameternamen und den Parameterwert ein?

Das ist mein Signaturcode:

<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>

Meine Signaturfunktion:

<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>

Der Wert von $wx_sign_all unterscheidet sich vom zurückgegebenen Vorzeichenwert!
Erfolgiert die Signaturüberprüfung durch den Vergleich des selbst erstellten Zeichens mit dem zurückgegebenen Zeichen?

///////////////////////////Das Problem wurde gelöst////////////// //// /////

Ich habe versehentlich einen falschen Wert geschrieben

<code>$wx_sign['sign']           = $wxdata['sign'];
$wx_sign_all = $this->wechatAppPay->MakeSign($wx_sign);//调用签名函数</code>

Hier fügen wir sign zur Signaturzeichenfolge hinzu, sign sollte nicht an der Signatur teilnehmen.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn