消息管理
微信公众号开发中,最重要的一个业务,我认为是消息管理。因为用户与公众号的交互的开始是通过公众对话窗口,不管是用户关注、取消关注、发送文字、图片等、点击菜单栏都会形成对应的消息。具体官方文档:https://mp.weixin.qq.com/wiki...
我们服务器收到微信服务器的消息类型有2类:
1.接收普通消息
2.接收事件推送
注意:微信服务器将POST消息的XML数据包到开发者填写的URL上,要求我们服务器要在5秒内回复(回复的格式也是xml),微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如我们服务器无法保证在五秒内处理并回复,可以直接回复空串(或success),微信服务器不会对此作任何处理,并且不会发起重试。但我们服务器没有5秒内或者回复了非法的数据,微信会在公众号会话中,向用户下发系统提示“该公众号暂时无法提供服务,请稍后再试“。
xml的一般格式:
报错:
下面我们先来看看接收普通消息
普通消息包括的类型:
1.文本消息 //MsgType=text
2.图片消息 //MsgType=image
3.语音 //MsgType=voice
4.视频消息 //MsgType=voice
5.小视频消息 //MsgType=shortvideo
6.地理位置消息 //MsgType=location
7.链接消息 //MsgType=link
微信服务器post过来的xml格式和各个字段的含义(以文本消息为例,其他消息的字段也差不多,都是通过:MsgType来区分不同的类型)
ToUserName 开发者公众号的微信号
FromUserName 发送者账号(这个账号,是用户的微信号加密而来,一般被称为openid)
CreateTime 时间戳
MsgType 消息类型
Content 内容
事件推送
事件推送的类型:
数据格式与普通消息的非常相似,MsgType都是event,事件推送通过Event字段来区分事件类型:subscribe(订阅)、unsubscribe(取消订阅)、
扫描带参数二维码事件(subscribe用户未关注时,进行关注后的事件推送;SCAN用户已关注时的事件推送)、LOCATION 上报地理位置事件、自定义菜单事件(CLICK 点击菜单拉取消息时的事件推送;VIEW 点击菜单跳转链接时的事件推送)
我们接收到微信服务器发送过来的数据,那我们怎样回复呢?
被动回复:
回复的数据格式也是xml,以回复文本消息为例,下面是xml数据。
ToUserName 接收方帐号(我们收到的openid)
FromUserName 开发者微信号
CreateTime 消息时间戳
MsgType 回复的消息类型
Content 回复的内容
实战例子:
1.用户关注公众号时,给用户发送欢迎语
2.收到各种普通消息,简单回复文本
3.npm install xml2js ,利用xml2js把xml解析成js对象
xml to js object:
关键代码:
1.自定义获取xml数据函数
2.业务逻辑
结果:
没有做回复的时候,可以看到微信推了3次数据,3次后公众号提示报错信息:
在公众号会话框中发送文字:“测试”
我们服务器收到微信3次的推送
正常加上回复逻辑后:
扫码关注时,提示:欢迎关注
发送文字、图片
消息管理-消息回复,我们就讲到这里。下一节,讲微信公众号接口的调用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。