用下面的代码页面做服务器配置已经验证提交成功 提交成功后我把$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 = ""; 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; } } } ?> %s 0
应该是你php配置的问题,按照提示把php.ini文件中的always_populate_raw_post_data修改一下。
为什么我的问题显示不出来?