1.根据微信公众平台文档,知道接收普通消息类型如下:
2.根据文档,微信服务器发送过来的消息都是xml格式的信息,所以可以从xml得到自己想要的信息。
废话不多说,看代码分析。
- <?php
- public function ResponseMsg()
- {
- $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //获取从微信服务器发送过来的信息
- if (!empty($postStr)){
- //simplexml_load_string() 函数把 XML 字符串载入对象中。然后从对象中得到相应数据
- $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
- $fromUsername = $postObj->FromUserName;
- $toUsername = $postObj->ToUserName;
- $keyword = trim($postObj->Content);
- $msgType = $postObj->MsgType;
- $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>";
- $replyMsg = "";
- if($msgType == "text")
- {
- $replyMsg = "您发的是文本信息";
- }
- else if($msgType == "image")
- {
- $replyMsg = "您发的是图片信息";
- }
- else if($msgType == "location")
- {
- $replyMsg = "您发的是地理位置信息";
- }
- else if($msgType == "event")
- {
- $eventType = $postObj->Event;
- if($eventType == "subscribe")
- {
- $replyMsg = "欢迎你订阅";
- }
- else if($eventType == "CLICK")
- {
- $replyMsg = "自定义菜单事件";
- }
- }
- $msgType = "text";
- $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType,$replyMsg); //根据文档要求,组成xml格式
- echo $resultStr; //输出,微信服务器接收响应
- }else{
- echo "";
- exit;
- }
- }
- ResponseMsg();
- ?>
3.大概思路:用户发送信息,微信服务器响应,并发送规定的xml格式数据到我们写的index.php,index.php进行响应处理,根据微信公众平台文档进行xml数据分析处理,并按要求返回xml格式数据到微信服务器;微信服务器做出响应解析,然后发送最终数据到用户微信!