Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Entwicklung zum Callback-Modus

PHP-Entwicklung zum Callback-Modus

php中世界最好的语言
php中世界最好的语言Original
2017-12-20 15:54:521308Durchsuche

Wir wissen, dass bei der Verwendung des Callback-Modus zur Entwicklung von WeChat-Unternehmenskonten immer Fehler auftreten. Deshalb stellen wir Ihnen dieses Mal die Lösung für das Fehlerproblem des Callback-Modus in der PHPPHP-Entwicklung vor. Werfen wir einen Blick darauf.

Tatsächlich ist die WeChat-Entwicklungsdokumentation sehr detailliert und mit der offiziellen Demo können Sie sie direkt verwenden, solange Sie geringfügige Änderungen vornehmen. Aber warum kommt es immer zu einem Fehler?

Nachfolgend werde ich zunächst den Code zum Aktivieren des Rückrufmodus veröffentlichen, den ich erfolgreich überprüft habe

<?php
//回调开启
include_once "WXBizMsgCrypt.php";
// 假设企业号在公众平台上设置的参数如下
$encodingAesKey = "xxx";
$token = "xxx";
$corpId = "xxx";//填写自己的相关参数,与微信公众平台一致
/*
------------使用示例一:验证回调URL---------------
*企业开启回调模式时,企业号会向验证url发送一个get请求
假设点击验证时,企业收到类似请求:
* GET /cgi-bin/wxpush?msg_signature=5c45ff5e21c57e6ad56bac8758b79b1d9ac89fd3×tamp=1409659589&nonce=263014780&echostr=P9nAzCzyDtyTWESHep1vC5X9xho%2FqYX3Zpb4yKa9SKld1DsH3Iyt3tP3zNdtp%2B4RPcs8TgAE7OaBO%2BFZXvnaqQ%3D%3D
* HTTP/1.1 Host: qy.weixin.qq.com
接收到该请求时,企业应
1.解析出Get请求的参数,包括消息体签名(msg_signature),时间戳(timestamp),随机数字串(nonce)以及公众平台推送过来的随机加密字符串(echostr),
这一步注意作URL解码。
2.验证消息体签名的正确性
3. 解密出echostr原文,将原文当作Get请求的response,返回给公众平台
第2,3步可以用公众平台提供的库函数VerifyURL来实现。
*/
// $sVerifyMsgSig = HttpUtils.ParseUrl("msg_signature");
$sVerifyMsgSig = $_GET["msg_signature"] ;//"5c45ff5e21c57e6ad56bac8758b79b1d9ac89fd3";
// $sVerifyTimeStamp = HttpUtils.ParseUrl("timestamp");
$sVerifyTimeStamp = $_GET["timestamp"];//"1409659589";
// $sVerifyNonce = HttpUtils.ParseUrl("nonce");
$sVerifyNonce = $_GET["nonce"];//"263014780";
// $sVerifyEchoStr = HttpUtils.ParseUrl("echostr");
$sVerifyEchoStr = $_GET["echostr"];//"P9nAzCzyDtyTWESHep1vC5X9xho/qYX3Zpb4yKa9SKld1DsH3Iyt3tP3zNdtp+4RPcs8TgAE7OaBO+FZXvnaqQ==";
// 需要返回的明文
$EchoStr = "";
$wxcpt = new WXBizMsgCrypt($token, $encodingAesKey, $corpId);
$errCode = $wxcpt->VerifyURL($sVerifyMsgSig, $sVerifyTimeStamp, $sVerifyNonce, $sVerifyEchoStr, $sEchoStr);
if ($errCode == 0) {
  echo $sEchoStr;
  //
  // 验证URL成功,将sEchoStr返回
  // HttpUtils.SetResponce($sEchoStr);
} else {
  print("ERR: " . $errCode . "\n\n");
}

Es ist ersichtlich, dass der obige Code im Grunde derselbe ist wie der in der Demo. Derselbe Code konnte vor einem Tag nicht überprüft werden. Bei der Überprüfung wurde festgestellt, dass der Domänenname ein vertrauenswürdiger Domänenname sein muss. ps: Ich verwende Sina Cloud, habe aber keine Authentifizierung mit echtem Namen durchgeführt, daher besteht ein Risiko. Nachdem ich meinen echten Namen authentifiziert habe, wurde es erfolgreich geöffnet.

Erleuchtung: Offizielle Dokumente sind nie falsch. Es ist notwendig, offizielle Dokumente sorgfältig zu studieren. Beim Öffnen des Rückrufmodus des WeChat Enterprise-Kontos muss der Domänenname ein vertrauenswürdiger Domänenname sein, was ebenfalls sehr wichtig ist.


Ich glaube, dass Sie die Methoden beherrschen, nachdem Sie diese Fälle gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Verwandte Lektüre:

Ajax-Technologie für asynchrone Anforderungen anhand von Beispielen erklärt

Was ist die allgemeine Syntax von AJAX

AJAX-Prinzipien und domänenübergreifende CORS-Methoden

Das obige ist der detaillierte Inhalt vonPHP-Entwicklung zum Callback-Modus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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