消息管理在微信公众号的开发中,最重要的业务,我认为是消息管理。因为用户与公众号的互动是通过公众对话窗口开始的,无论用户关注、取消关注、发送文字、图片等,点击菜单栏都会形成相应的消息。具体官方文档:https://mp.weixin.qq.com/wiki...我们的服务器从微信服务器接收到的消息有2种:1.接收普通消息2.接收事件推送注:微信服务器将POST消息发送到开发者填写的URL的XML数据包,要求我们的服务器在5秒内回复(回复的格式也是xml)。如果微信服务器在5秒内没有收到响应,就会断开连接,重新发起请求。再试三遍。如果我们的服务器不能保证在五秒内处理并回复,您可以直接回复空字符串(或者成功),微信服务器不会做任何处理,也不会发起重试。但是我们的服务器在5秒内没有回复非法数据,微信会在公众号会话期间向用户发送系统提示,“该公众号服务暂时不可用,请稍后再试”。xml的一般格式:报错:下面看一下接收普通消息的类型:1.文本消息//MsgType=text2。图片消息//MsgType=image3.语音//MsgType=voice4.视频消息//MsgType=voice5.小视频消息//MsgType=shortvideo6.地理位置消息//MsgType=location7.链接消息//MsgType=link微信服务器推送的xml格式及各字段含义(以短信为例,其他消息的字段类似,均以:MsgType区分)ToUserName开发者公众号微信账号FromUserName发件人账号(这个账号是从用户微信账号加密过来的,一般叫openid),而事件推送使用Event字段区分事件类型:subscribe(订阅)、unsubscribe(取消订阅)、带参数扫描二维码事件(订阅用户不关注时,跟随事件推送;SCAN用户事件推送时youhavefollowed),LOCATION上报地理位置事件,自定义菜单事件(CLICK点击菜单拉取消息时的事件推送;VIEW点击菜单跳转链接时的事件推送)我们收到了微信服务器发送的数据,我们如何回复?被动回复:回复的数据格式也是xml,以回复短信为例,下面是xml数据。ToUserName接收者账号(我们收到的openid)FromUserName开发者微信IDCreateTimeMessagetimestampMsgTypeReply消息类型Content回复内容实际例子:1.当用户关注公众号时,向用户发送欢迎信息2.收到各种常见的messages,简单回复文本3.npminstallxml2js,使用xml2js将xml解析为js对象xml转js对象:关键代码:1.自定义获取xml数据的函数2.业务逻辑结果:没有回复时,可以看到微信推送了3次数据,3次后,公众号会提示错误信息:在公众号对话框发送文本:“测试”我们的服务器已经正常收到微信的3次推送,并添加了回复逻辑:扫一扫关注二维码时,提示:欢迎发送文字和图片留言管理-留言回复,到此为止。下一节我们讲微信公众号接口的调用。
