php - 微信发送文本消息总是提示错误

 KeNnyT0nGMM_934 发布于 2022-11-15 00:04

用下面的代码页面做服务器配置已经验证提交成功 提交成功后我把$wechatObj->valid();一行注释掉了然后加上了$wechatObj->responseMsg();这句话 我用调试软件测试发送文本消息时显示下面的错误内容 这是为什么?

用浏览器打开这个php页面会报图片中的错误内容

发送文本消息测试会提示下面的错误内容

PHP Deprecated:  Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. 
To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in Unknown on line 0
PHP Warning:  Cannot modify header information - headers already sent in Unknown on line 0
PHP Notice:  Undefined index: echostr in C:\PHPstydy\WWW\weixin\weixin.php on line 16
PHP Notice:  Undefined index: signature in C:\PHPstydy\WWW\weixin\weixin.php on line 71
PHP Notice:  Undefined index: timestamp in C:\PHPstydy\WWW\weixin\weixin.php on line 72
PHP Notice:  Undefined index: nonce in C:\PHPstydy\WWW\weixin\weixin.php on line 73

发送文本消息测试时提示代码报错的具体位置我都标出来了

valid();
$wechatObj->responseMsg();


class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];               //这里报错
        if($this->checkSignature()){
            echo $echoStr;
            exit;
        }
    }

    public function responseMsg()
    {
        //get post data, May be due to the different environments
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];         //这里是图片中报错的位置

          //extract post data
        if (!empty($postStr)){
                /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
                   the best way is to check the validity of xml by yourself */
                libxml_disable_entity_loader(true);
                  $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $fromUsername = $postObj->FromUserName;
                $toUsername = $postObj->ToUserName;
                $keyword = trim($postObj->Content);
                $time = time();
                $textTpl = "
                            
                            
                            %s
                            
                            
                            0
                            ";             
                if(!empty( $keyword ))
                {
                      $msgType = "text";
                    $contentStr = "Welcome to wechat world!";
                    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                    echo $resultStr;
                }else{
                    echo "Input something...";
                }

        }else {
            echo "";
            exit;
        }
    }
        
    private function checkSignature()
    {
        // you must define TOKEN by yourself
        if (!defined("TOKEN")) {
            throw new Exception('TOKEN is not defined!');
        }
        
        $signature = $_GET["signature"];         //这里报错
        $timestamp = $_GET["timestamp"];         //这里报错  
        $nonce = $_GET["nonce"];                 //这里报错
                
        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        // use SORT_STRING rule
        sort($tmpArr, SORT_STRING);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );
        
        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }
}

?>
2 个回答
  • 为什么我的问题显示不出来?

    2022-11-15 00:07 回答
  • 应该是你php配置的问题,按照提示把php.ini文件中的always_populate_raw_post_data修改一下。

    2022-11-15 00:07 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有