接受用户消息
当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 消息创建时间 (整型)
MsgType text
Content 文本消息内容
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的 - 返回一个格式化字符串