易信公众平台开发从入门到精通之接收普通消息
2014-06-04 12:53
204 查看
对公众号来说,这是一种新的接收用户发送消息的方式。公众号不需要再登录平台,就可以接收用户发送的文本,图片,语音,视频,地理位置等消息
当普通易信用户向公众账号发消息时,易信服务器将POST消息的XML数据包发到开发者填写的URL上。开发者消息接收进行处理后,按照一定格式返回消息给公众平台。可以用下述UML时序图来表示:
![](https://img-blog.csdn.net/20140604125018390?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdnlpeXVu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
对于每一个POST请求,开发者需要返回特定XML结构,对该消息进行响应(现支持回复文本、图文、音乐)。请注意,回复音乐图片等多媒体消息时需要预先上传多媒体文件到易信服务器。
注意:易信服务器在五秒内收不到响应会断掉连接,如果在调试中,发现用户无法收到响应的消息,可以检查是否消息处理超时。
我们通过代码来实现消息的接收。类YiXinCore.class.php中的responseMsg方法,部分代码片段:
1 publicfunction responseMsg()
2 {
3 //接收易信post方式推送来的消息;
4 $postContent= $GLOBALS["HTTP_RAW_POST_DATA"];
5 Log::wLog('INFO',"收到消息:".$postContent);
6 $xmlObj= simplexml_load_string($postContent, 'SimpleXMLElement', LIBXML_NOCDATA);
7 //将获取的数据转化为数组并转为小写,以减少参数大小写的影响
8 $this->_postMsgData= array_change_key_case((array)$xmlObj, CASE_LOWER);
9 ……
10 }
这段代码主要就是接收易信post方式推送过来的消息,保存在$postContent变量中,通过simplexml_load_string函数将xml字符串对象化,便于后面的操作。
比如用户发送一段文本,则会收到类似下述的消息:
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgId>138810775</MsgId>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[this is atest]]></Content>
</xml>
每种类型的消息中都含有公共的,相同的参数,我们把这部分抽取出来做一介绍。参数的描述如表:
参数详细说明如下:
ToUserName 是开发者易信号,可以看作是原始ID,长度32位,类似
”98772e76b67a7256c3061cd18d77b7a9”。这个字符串我们可以在后台日志中进行查看。
FromUserName 也称为OpenID。是一个16位或者32位的字符串。可以认为是用户的唯一标识。注意,对于同一个公众帐号,用户的OpenID是不变的。但是对于不同的公众账号,同一个用户的OpenID是变化的。
MsgType 消息类型。其中text表示文本消息、image表示图片消息、location表示地理位置消息、voice表示语音消息、video表示视频消息。
具体消息可以参考易信公众平台开发者文档,在此不再累述。
当普通易信用户向公众账号发消息时,易信服务器将POST消息的XML数据包发到开发者填写的URL上。开发者消息接收进行处理后,按照一定格式返回消息给公众平台。可以用下述UML时序图来表示:
对于每一个POST请求,开发者需要返回特定XML结构,对该消息进行响应(现支持回复文本、图文、音乐)。请注意,回复音乐图片等多媒体消息时需要预先上传多媒体文件到易信服务器。
注意:易信服务器在五秒内收不到响应会断掉连接,如果在调试中,发现用户无法收到响应的消息,可以检查是否消息处理超时。
我们通过代码来实现消息的接收。类YiXinCore.class.php中的responseMsg方法,部分代码片段:
1 publicfunction responseMsg()
2 {
3 //接收易信post方式推送来的消息;
4 $postContent= $GLOBALS["HTTP_RAW_POST_DATA"];
5 Log::wLog('INFO',"收到消息:".$postContent);
6 $xmlObj= simplexml_load_string($postContent, 'SimpleXMLElement', LIBXML_NOCDATA);
7 //将获取的数据转化为数组并转为小写,以减少参数大小写的影响
8 $this->_postMsgData= array_change_key_case((array)$xmlObj, CASE_LOWER);
9 ……
10 }
这段代码主要就是接收易信post方式推送过来的消息,保存在$postContent变量中,通过simplexml_load_string函数将xml字符串对象化,便于后面的操作。
比如用户发送一段文本,则会收到类似下述的消息:
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgId>138810775</MsgId>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[this is atest]]></Content>
</xml>
每种类型的消息中都含有公共的,相同的参数,我们把这部分抽取出来做一介绍。参数的描述如表:
参数 | 描述 |
ToUserName | 开发者易信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgId | 消息id,64位整型 |
MsgType | 消息类型 |
参数详细说明如下:
ToUserName 是开发者易信号,可以看作是原始ID,长度32位,类似
”98772e76b67a7256c3061cd18d77b7a9”。这个字符串我们可以在后台日志中进行查看。
FromUserName 也称为OpenID。是一个16位或者32位的字符串。可以认为是用户的唯一标识。注意,对于同一个公众帐号,用户的OpenID是不变的。但是对于不同的公众账号,同一个用户的OpenID是变化的。
MsgType 消息类型。其中text表示文本消息、image表示图片消息、location表示地理位置消息、voice表示语音消息、video表示视频消息。
具体消息可以参考易信公众平台开发者文档,在此不再累述。
相关文章推荐
- C#微信公众号开发系列教程四(接收普通消息)
- 微信公众平台开发【接收消息】接收普通消息
- C#微信公众号开发系列教程四(接收普通消息)
- 微信公众号开发之接收普通消息
- 微信开发三 接收普通消息
- 用c#开发微信(3)基于Senparc.Weixin框架的接收普通消息处理 (源码下载)
- 微信开发之接收普通消息
- 用java开发微信公众号:接收和被动回复普通消息(三)
- 微信公众平台开发入门教程(四)获取接收消息
- 微信公众平台开发【接收消息】接收普通消息
- dotNet微信公众号开发二:接收并回复普通文字消息
- 微信开发学习总结(三)——开发微信公众号的最基本功能——普通消息的接收和回复
- 微信开发学习总结(三)——开发微信公众号的最基本功能——普通消息的接收和回复
- 微信公众号开发之接收普通消息
- Java开发微信公众号接收和被动回复普通消息
- 用java开发微信公众号:接收和被动回复普通消息(三)
- Delphi XE7 用indy开发微信公众平台(4)- 接收普通消息
- C#微信公众号开发系列教程四(接收普通消息)
- 微信公众号开发_Java(3)--接收普通消息
- 微信公众平台开发入门教程(四)获取接收消息