2025年5月23日 星期五 乙巳(蛇)年 二月廿五 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Other

微信公众号token验证成功,但是自动回复没反应 / 该公众号服务故障

时间:07-30来源:作者:点击数:57

微信公众号token验证成功,但是自动回复没反应 / 该公众号服务故障

微信公众号token验证成功,但是自动回复没反应 / 该公众号服务故障

微信公众号token验证成功,但是自动回复没反应 / 该公众号服务故障

先上代码,输入?自动回复时间

  • <?php
  • header('Content-type:text');
  • define("TOKEN", "weixin");
  • $wechatObj = new wechatCallbackapiTest();
  • if (isset($_GET['echostr'])) {
  • $wechatObj->valid();
  • }else{
  • $wechatObj->responseMsg();
  • }
  • class wechatCallbackapiTest
  • {
  • public function valid()
  • {
  • $echoStr = $_GET["echostr"];
  • if($this->checkSignature()){
  • echo $echoStr;
  • exit;
  • }
  • }
  • private function checkSignature()
  • {
  • $signature = $_GET["signature"];
  • $timestamp = $_GET["timestamp"];
  • $nonce = $_GET["nonce"];
  • $token = TOKEN;
  • $tmpArr = array($token, $timestamp, $nonce);
  • sort($tmpArr);
  • $tmpStr = implode( $tmpArr );
  • $tmpStr = sha1( $tmpStr );
  • if( $tmpStr == $signature ){
  • return true;
  • }else{
  • return false;
  • }
  • }
  • public function responseMsg()
  • {
  • $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
  • if (!empty($postStr)){
  • $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
  • $fromUsername = $postObj->FromUserName;
  • $toUsername = $postObj->ToUserName;
  • $keyword = trim($postObj->Content);
  • $time = time();
  • $textTpl = "<xml>
  • <ToUserName><![CDATA[%s]]></ToUserName>
  • <FromUserName><![CDATA[%s]]></FromUserName>
  • <CreateTime>%s</CreateTime>
  • <MsgType><![CDATA[%s]]></MsgType>
  • <Content><![CDATA[%s]]></Content>
  • <FuncFlag>0</FuncFlag>
  • </xml>";
  • if($keyword == "?" || $keyword == "?")
  • {
  • $msgType = "text";
  • $content = date("Y-m-d H:i:s",time());
  • $result = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $content);
  • echo $result;
  • }
  • }else{
  • echo "";
  • exit;
  • }
  • }
  • }
  • ?>
原因:$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];获取不到值,为空的
  • 1.用file_get_contents('php://input')替换$GLOBALS["HTTP_RAW_POST_DATA"];来获取数据测试,如果正常,说明确实是因为上面没获取到值导致的错误;如果还是获取不到,则可能是数据传输错误
  • 2.如果上面的file_get_contents('php://input')能正常,查看php.ini配置文件并配置always_populate_raw_post_data = On。 【注意】这个处理方式是在php版本较低的时候,php-ini中才有该配置,7以上的版本已经废除

如果出现的是该公众号服务故障, 可以用echo "";来调试,因为echo "";服务器没东西返回没反应,而不是出现该公众号服务故障

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门