微信公众消息开发wx_sample.php没有自动回复。求大神解决下。

今天注册了微信公众开发者,用了官网给的接口文件,但是用微信发消息没有自动回复。wx_sample.php内容:
<?php
/**
* wechat php test
*/

//define your token
define("TOKEN", "ldge331");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();

class wechatCallbackapiTest
{
public function valid()
{
$echoStr = $_GET["echostr"];

//valid signature , option
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)){

$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()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];

$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );

if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}

?>

服务器没有问题,用了微信测试工具测试了下是能正常请求的:
200 OK
Connection: close
Date: Sun, 27 Jul 2014 09:17:51 GMT
X-Powered-By: ASP.NET
Server: Microsoft-IIS/6.0
Content-Type: text/html

提示:
请求成功

因为这个示例只调用了校验的方法没有调用回复的方法

<?php
/**
  * wechat php test
  */

//define your token
define("TOKEN", "ldge331");
$wechatObj = new wechatCallbackapiTest();
//$wechatObj->valid();这里调用了校验的方法,验证完url后注释掉就行了


/*这样调用回复的方法,具体什么逻辑修改responseMsg函数*/
$wechatObj->responseMsg();


class wechatCallbackapiTest
{
public function valid()
    {
        $echoStr = $_GET["echostr"];

        //valid signature , option
        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)){
                
               $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()
{
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
       
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );

if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}

?>
温馨提示:内容为网友见解,仅供参考
第1个回答  2017-08-04
因为这个只调用了valid(),没有调用responseMsg(),而后者才是回复
,可以将$wechatObj->valid();改成下面这样
if (isset($_GET['echostr'])){
$wechatObj->valid();
}else{
$wechatObj->responseMsg();
}
第2个回答  2014-07-28
你装的php 几 是不是版本太低?

微信公众消息开发wx_sample.php没有自动回复。求大神解决下。
option if($this->checkSignature()){ echo $echoStr; exit; } } public function responseMsg()\/\/这是回复信息的方法 {\/\/get post data, May be due to the different environments

微信公众平台开发提示"请求url超时"
解决方法如下:1,从微信那再次下载wx_sample.zip的包。2,重新设置token,将wx_sample.zip的代码解压后保存,需要的文件名如:index.php。3,认证通过后,在用你原有的代码覆盖index.php即可正常运行。微信不同账号区别 服务号的功能:公众平台服务号,是公众平台的一种服务号类型,旨在为用户提供服务...

微信公众平台开发制作,微信公众服务号平台开发,微信企业官方网站怎么做...
1.微信公众平台。登录微信公众平台后台,选择高级功能,进入后就看到两种模式。2.选择开发模式。默认开发模式是关闭的,直接选择成为开发者按钮。同意《微信公众平台开发者服务协议》下一步。3.弹出URL和Token填写框,此处的URL为网站存在微信的文件夹weixin,而Token是等会在接入指南下载的index.php文件中定...

如何自己开发一个微信公众号,想做个APP
1. 准备工具\/原料:注册好的微信公众平台账号,以及拥有自己的虚拟主机或网站服务器。2. 进入微信公众平台平台:登录微信公众平台后台,选择高级功能,进入开发模式。3. 开启开发模式:默认开发模式是关闭的,点击成为开发者按钮,并同意《微信公众平台开发者服务协议》。4. 填写URL和Token:在弹出的URL和T...

微信公众号开发难不难
问题一:想学习微信公众号开发 难吗 微信公众号开发本质上跟公众号关系不大,本质上是开发程序,只不过是一个需要调用微信提供的接口的主要在微信中使用的程序而已,它可以是java,c++,c#,php等任何一种开发语言开发的,所以,如果你是程序开发人员,那一点都不难,如果你不是,那有两种选择,完全自学程序设计,这个难度你自...

微信官网中在哪里下载公众平台api文件
微信公众平台在哪里看API 在哪里下载wxsample.php示例 在登入前的介面上有帐号分类,滑鼠移到想看的帐号型别上面,就会出现开发文件了。微信公众平台客户端在哪里下载 公众平台没有客户端,你只能在电脑上访问公众平台的网站并进行登入 微信公众平台lbs在哪里设定? 你好  微信公众号关键词自动回复...

怎么处理微信"token验证失败”
2. 在微擎平台中,修改Token值可能没有正确执行。确保在修改Token时,值是正确输入的。3. 微信公众平台的开发配置也可能存在问题。在“开发——基本配置——修改配置”中,确保:a. 服务器配置地址(URL)填写正确,例如“域名\/wx_sample.php”。b. Token值填写正确,且与服务器程序中的Token一致。

企业微信应用开启API接收消息
坑1 下载官方的处理接口的范例,放在Thinkphp>Library>Wechat(自建)目录下 修改WXBizMsgCrypt.php为WXBizMsgCrypt.class.php 在WXBizMsgCrypt中声明命名空间namespace Wechat;在你需要的控制器中引入类use Wechat WXBizMsgCrypt;之后就是使用官方的sample copy进你的项目简单修改下就算整合完成了,过程...

微信公众平台开发提示"请求url超时"是怎么回事?
原因: 配置的平台服务器响应不够,或是后台程序问题。解决方法如下:1,从微信那再次下载wx_sample.zip的包。2,重新设置token,将wx_sample.zip的代码解压后保存,需要的文件名如:index.php。3,认证通过后,在用你原有的代码覆盖index.php即可正常运行。微信不同账号区别 服务号的功能:公众平台...

相似回答