公众号接收事件推送,普通消息
"接收普通消息:当普通微信用户向公众账号发消息时,微信服务器将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文件
公众号已经获取信息到了。接下来的业务就自己去实现吧,事件推送接收就下一篇文章再写吧
其实是一样的。