Situationsbeschreibung:
1. Rufen Sie dieselbe Bestellschnittstelle auf und der entsprechende Wert für prepay_id wurde erhalten!
2. Vor der Übermittlung der Daten an die App erfolgt eine sekundäre Signatur, die ich gemäß den Regeln unterschreibe. //Bitte überprüfen Sie, ob der von mir geschriebene Code korrekt ist
3. Warum tritt dieses Problem auf?
4. Knie nieder und flehe Gott um Führung an!
Dies ist mein sekundärer Signaturcode:
............ //Parameter usw. festlegen.
$wx_result = $wechatAppPay->unifiedOrder( $params );//调用同一下单接口,并成功返回结果 //开始生成二次签名 $sign_array = array();//第二次签名需要的参数 $sign_array['appid'] = $wx_result['appid']; $sign_array['mch_id'] = $wx_result['mch_id']; $sign_array['prepay_id'] = $wx_result['prepay_id']; $sign_array['nonce_str'] = $wx_result['nonce_str']; $sign_array['timeStamp'] = time(); $sign_array['package'] = $wx_result['Sign=WXPay']; $sign_two = $wechatAppPay->MakeSign($sign_array);//调用签名生成函数
Das Folgende ist mein Funktionscode zum Generieren von Signaturen:
/** * 生成签名 * @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; } /** * 将参数拼接为url: key=value&key=value * @param $params * @return string */ public function ToUrlParams( $params ){ $string = ''; if( !empty($params) ){ $array = array(); foreach( $params as $key => $value ){ $array[] = $key.'='.$value; } $string = implode("&",$array); } return $string; }
Dieses Problem wurde gelöst, da der Parametername in der zweiten Signatur falsch war.
/////////////////////////////Update///////////// // ///////////////////////////////////////////// ////// ////////////////////////////////////////////////////////////////////////// ////////// /////////////////////////////////
Aber Ich weiß nicht, wie ich den Rückruf schreiben soll! !
Aber ich kann den Wert nicht erhalten (ich kann die allgemeine Benachrichtigung über das Zahlungsergebnis nicht von WeChat erhalten) und ich weiß nicht, was los ist
Erhalte einen asynchronen Benachrichtigungsrückruf Adresse für WeChat-Zahlung:
$notify_url = 'http://www.XXXXXX.com/index.php/apps/cart/wxResult';
//微信支付回调函数 public function wxResult() { $data = array(); $data = $this->wechatAppPay->getNotifyData();//调用获取数据函数 ////////********逻辑处理********////////// $data2 = $this->wechatAppPay->replyNotify();//接收通知成功后应答输出XML数据 $this->jsonmsg($data); }
Funktion zum Abrufen von Benachrichtigungsdaten:
/** * * 获取支付结果通知数据 * return array */ public function getNotifyData(){ //获取通知的数据 $xml = $GLOBALS['HTTP_RAW_POST_DATA']; $data = array(); if( empty($xml) ){ return false; } $data = $this->xml_to_data( $xml ); if( !empty($data['return_code']) ){ if( $data['return_code'] == 'FAIL' ){ return false; } } return $data; }
Funktion zum Antworten und Ausgeben von XML-Daten nach erfolgreichem Empfang der Benachrichtigung:
/** * 接收通知成功后应答输出XML数据 * @param string $xml */ public function replyNotify(){ $data['return_code'] = 'SUCCESS'; $data['return_msg'] = 'OK'; $xml = $this->data_to_xml( $data ); echo $xml; die(); }
**Gelöst
///////Aktualisierung//////////////////Das Händlersystem führt eine Signaturüberprüfung des Inhalts durch Zahlungsergebnisbenachrichtigung///////////// ///////////////////**
Das Händlersystem führt eine Signatur durch Überprüfung des Inhalts der Zahlungsergebnisbenachrichtigung.
Was ist das? Was ist die logische Idee?
Antwortinhalt:
Payment-Interface-Dokument
Im Dokument angegebene Felder
appid
partnerid
prepayid
Paket
noncestr
Zeitstempel
Zeichen
Bitte ändern Sie nicht die Groß-/Kleinschreibung des Parameternamens und fügen Sie keine Unterstriche oder ähnliches hinzu. Ich bin schon einmal auf dieses Problem gestoßen und es wurde gelöst.
Hallo, ich bin auch auf das gleiche Problem gestoßen. Ich frage mich, ob Sie es gelöst haben.
Ist der Parametername in der MD5-Berechnung enthalten?
Der Zeitstempel der sekundären Signatur ist der Zeitstempel, als pre_payid generiert wurde