易信公众平台开发从入门到精通之接收普通消息
来源:互联网 发布:centos 主流版本 编辑:程序博客网 时间:2024/06/08 07:28
对公众号来说,这是一种新的接收用户发送消息的方式。公众号不需要再登录平台,就可以接收用户发送的文本,图片,语音,视频,地理位置等消息
当普通易信用户向公众账号发消息时,易信服务器将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表示视频消息。
具体消息可以参考易信公众平台开发者文档,在此不再累述。
- 易信公众平台开发从入门到精通之接收普通消息
- 易信公众平台开发从入门到精通之开发验证
- 易信公众平台开发从入门到精通之天气预报
- 易信公众平台开发从入门到精通之获取凭证
- 易信公众平台开发从入门到精通之获取凭证利用SAE缓存
- 微信公众平台开发【接收消息】接收普通消息
- 微信公众号开发之接收普通消息
- 微信公众号开发之接收普通消息
- 微信公众平台从入门到精通二
- 微信公众平台开发入门教程(PHP从入门到精通)
- 《微信公众平台入门到精通》
- 微信公众平台--接收普通消息与事件
- 微信开发之接收普通消息
- PHP7.0微信公众平台开发4: 实例一:接收普通消息和接收事件推送
- 微信公众平台开发[2]-开发模式-接收消息
- Python3: Django开发微信公众号平台功能测试之普通消息回复
- 使用Golang开发微信公众平台----接收消息
- 微信公众平台开发获取接收消息
- 一个 UNIX 开发者需要掌握的 AIX 技巧
- 三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)
- 每天学习一个linux命令(10):cat 命令
- 每天学习一个linux命令(11):nl命令
- Boost Preprocessor is so cool
- 易信公众平台开发从入门到精通之接收普通消息
- 向量的点乘与叉乘
- Qt自定义委托在QTableView中绘制控件、图片、文字
- 每天学习一个linux命令(12):more命令
- 24种不同的ITF条形码字体Interleaved 2 of 5 Barcode Font Advantage Package
- JS CSS创造奇迹
- Python中实现线程池(一)
- 三十三、Java图形化界面设计——布局管理器之null布局(空布局)一般容器都有默认布局方式,但是有时候需要精确指定各个组建的大小和位置,就需要用到空布局。 操作方法: 1)
- 每天学习一个linux命令(13):less 命令