3、微信公众号开发之接收用户消息

来源:互联网 发布:淘宝同学 编辑:程序博客网 时间:2024/05/19 20:23

接受用户消息

当Token通过验证之后,在用户发送消息过来的时候,微信服务器将也会带上前面3个参数(signature、timestamp和nonce)访问开发者设置的URL,同时还会将消息的XML数据包POST到URL 上。


第一步:获取POST数据

$postData = $HTTP_RAW_POST_DATA; //获取POST数据


第二步:解析XML数据

 $postObj = simplexml_load_string($postData,"SimpleXMLElement",LIBXML_NOCDATA);


第三步:根据用户的消息类型执行不同的操作

例如:文本消息;

<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName>  <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></Content> <MsgId>1234567890123456</MsgId> </xml>参数描述ToUserName开发者微信号FromUserName发送方帐号(一个OpenID)CreateTime消息创建时间 (整型)MsgTypetextContent文本消息内容MsgId消息id,64位整型

获取消息对应的参数:

        $FromUserName = $postObj->FromUserName;//发送方        $ToUserName = $postObj->ToUserName;//接收方        $Content = $postObj->Content; //用户发送的消息内容

案例(实现用户发送文本消息内容,回复自定义的内容):

<?php//--------------------------- 接收用户文字记录--------------------------------        //1.获取微信服务器post请求过来的数据;        // $postData = $HTTP_RAW_POST_DATA; //获取POST数据                  $postData = $HTTP_RAW_POST_DATA; //获取POST数据    // $formxml = " <xml>                         // <ToUserName><![CDATA[接收方:J、wen]]></ToUserName>                         // <FromUserName><![CDATA[发送方:User]]></FromUserName>                          // <CreateTime>2017-1-1</CreateTime>                         // <MsgType><![CDATA[text]]></MsgType>                         // <Content><![CDATA[消息发送成功...]]></Content>                         // <MsgId>1234567890123456</MsgId>                         // </xml>";//2.解析服务器的xml包        $postObj = simplexml_load_string($postData,"SimpleXMLElement",LIBXML_NOCDATA);        // echo "<pre>";        // print_r($postObj);        // echo "</pre>";        // 3.获取用户发的消息:        $FromUserName = $postObj->FromUserName;//发送方        $ToUserName = $postObj->ToUserName;//接收方        $MsgType = $postObj->MsgType;//消息类型        $CreateTime = $postObj->CreateTime;//创建时间        $Content = $postObj->Content;//消息内容        $MsgId = $postObj->MsgId;//消息ID        $time = time();//获取当前时间;//--------------------------- 回传记录--------------------------------        // if("text" != $MsgType){        //         $reMsg = "用户发送的不是文本消息!";        // }else{        //         $reMsg = $FromUserName;        //         echo $FromUserName.$ToUserName.$MsgType.$CreateTime.$Content.$MsgId;        //         exit;        // }        $toxml = "<xml>                        <ToUserName><![CDATA[%s]]></ToUserName>                        <FromUserName><![CDATA[%s]]></FromUserName>                        <CreateTime>%s</CreateTime>                        <MsgType><![CDATA[text]]></MsgType>                        <Content><![CDATA[%s]]></Content>                        </xml>";        $Content2 = "我试管理员 ,你是谁?";        //格式化消息模板         $resultStr = sprintf($toxml,$FromUserName,$ToUserName,$time,$Content2);        echo $resultStr; //输出结果 ?>
本节用到的PHP函数:
$HTTP_RAW_POST_DATA — 原生POST数据

simplexml_load_string - 解释XML字符串转换成对象

sprintf的 - 返回一个格式化字符串




0 0
原创粉丝点击