公众号接收事件推送,普通消息

"接收普通消息:当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上"

我已开始的时候对公众号不熟悉,看到以上那句话之后我也是满脸的疑问,“微信服务器将POST消息的XML数据包到开发者填写的URL上”?,是那个url?我然后回想了一下,原来,我之前写了一个url是用来验证token的就是那个url。

验证access_token仅仅验证一次就可以了。以后那个url无论微信官方发什么信息都是发给那个url了。

就是下面这个:


废话不多现在开始看看是如何接收的。

扔下代码看看

respond.php

<?php
/**
  * wechat php test
  */
 
//define your token
define("TOKEN", "hehehe");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->responseMsg();
//$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

//为了能让你们看到,我打获取的信息写入到text.txt

        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
  file_put_contents("./test.txt",$postStr."<br>",FILE_APPEND);

          //extract post data
        if (!empty($postStr)){
                 
                  $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $fromUsername = $postObj->FromUserName;
                $toUsername = $postObj->ToUserName;
                //$toUsername ="o7z4k0xt9kjDNHzThMiphjrHnFQ4";
                $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>";




         //       $textTpl="<xml>
            //     <ToUserName>< ![CDATA[%s]]></ToUserName>
               //  <FromUserName>< ![CDATA[%s]]></FromUserName>
                // <CreateTime>%s</CreateTime>
                // <MsgType><![CDATA[%s]]></MsgType>
                // <Image><MediaId>< ![CDATA[%s]]></MediaId>
                // </Image></xml>";            
                if(!empty( $keyword ))
                {
                    $msgType = "text";
                    $contentStr = '这是自动回复';
                    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                    echo $resultStr;
                }else{
                    echo "Input something...";
                }
 
        }else {
            echo "";
            exit;
        }

    }

}

下面来实践一波


看看text.txt文件



公众号已经获取信息到了。接下来的业务就自己去实现吧,事件推送接收就下一篇文章再写吧

其实是一样的。