php - 微信发送文本消息总是提示错误
伊谢尔伦
伊谢尔伦 2017-04-11 09:52:25
[PHP讨论组]

用下面的代码页面做服务器配置已经验证提交成功 提交成功后我把$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

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

<?php

define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
//$wechatObj->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 = "<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(!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;
        }
    }
}

?>
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(2)
黄舟

应该是你php配置的问题,按照提示把php.ini文件中的always_populate_raw_post_data修改一下。

高洛峰

为什么我的问题显示不出来?

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号