微信公众号开发普通消息的接收和回复

上传人:kms****20 文档编号:45565780 上传时间:2018-06-17 格式:PDF 页数:25 大小:913.50KB
返回 下载 相关 举报
微信公众号开发普通消息的接收和回复_第1页
第1页 / 共25页
微信公众号开发普通消息的接收和回复_第2页
第2页 / 共25页
微信公众号开发普通消息的接收和回复_第3页
第3页 / 共25页
微信公众号开发普通消息的接收和回复_第4页
第4页 / 共25页
微信公众号开发普通消息的接收和回复_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《微信公众号开发普通消息的接收和回复》由会员分享,可在线阅读,更多相关《微信公众号开发普通消息的接收和回复(25页珍藏版)》请在金锄头文库上搜索。

1、 1 / 25 微信公众号开发普通消息的接收和回复 一、微信公众平台消息管理接口介绍 要实现微信公众号的普通消息的接收和回复,我们需要先熟悉微信公众平台 API 中消息接口部分,进入到【消息管理】部分,如下图所示: 对于普通消息的接收和回复我们只需要关注上图中的“接收消息接收普通消息“和“发送消息被动回复消息“ 1.1、消息接收 先来说说接收消息, 当普通微信用户向公众账号发消息时,微信服务器会先接收到用户发送的消息,然后将用户消息按照指定的 XML 格式组装好数据,最后 POST 消息的 XML 数据包到开发者填写的 URL 上。 接收到的普通消息的消息类型目前有以下几种: 1 文本消息 2

2、 图片消息 3 语音消息 4 视频消息 5 小视频消息 6 地理位置消息 7 链接消息 2 / 25 每一种消息类型都有其指定的 XML 数据格式,这 7 种消息的 xml 格式请到官方文档查看,有具体的格式定义和属性说明。格式很简单,基本共有属性包括 ToUserName、FromUserName、CreateTime、MsgType、MsgId,并且每种类型有自己特殊的属性。 接收消息的过程其实就是获取 post 请求的这个 xml, 然后对这个 xml 进行分析的过程。 post 请求的入口还是之前提到的微信公众号接入的那个地址,整个公众号的所有请求都会走这个入口,只是接入时是 get

3、请求,其它情况下是 post 请求。 1.2、消息回复 微信服务器在将用户的消息发给公众号的开发者服务器地址后,会等待开发者服务器回复响应消息。微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。 假如服务器无法保证在五秒内处理并回复,必须做出下述回复,这样微信服务器才不会对此作任何处理,并且不会发起重试(这种情况下,可以使用客服消息接口进行异步回复),否则,将出现严重的错误提示。详见下面说明: 1、(推荐方式)直接回复 success 2、直接回复空串(指字节长度为 0 的空字符串,而不是 XML 结构体中 content 字段的内容为空) 一旦遇到以下情况,微信都会在公

4、众号会话中,向用户下发系统提示“该公众号暂时无法提供服务,请稍后再试”: 1、开发者在 5 秒内未回复任何内容 2、开发者回复了异常数据,比如 JSON 数据等 另外,请注意,回复图片等多媒体消息时需要预先通过素材管理接口上传临时素材到微信服务器,可以使用素材管理中的临时素材,也可以使用永久素材。 消息回复目前支持回复文本、图片、图文、语音、视频、音乐,每一种类型的消息都有特定的 XML 数据格式。这几种回复消息的 xml 数据格式请参考官方文档,有具体的格式定义和属性说明。格式很简单,基本共有属性包括 ToUserName、FromUserName、CreateTime、MsgType,并且

5、每种类型有自己特殊的属性。 二、微信公众号的普通消息的接收和回复 2.1、接收消息 接收消息和被动回复消息这两个动作是不分家的,这本来就是一个交互场景,一般情况就是公众号通过分析接收到的消息,会给出对应的回复。 之前说过了,接收消息的过程其实就是获取微信服务器通过 post 请求的发送给我们公众号服务器的 xml 数据,然后我们的公众号服务器再对这个 xml 进行解析处理的过程。为了方便解析 XML 数据,我们借助于 dom4j,dom4j 是一个十分优秀的 JavaXML API,具有性能优异、功能强大和极其易使用的特点,是用来读写 XML 文件的。针对微信服务器发来的 xml请求数据,我们

6、写一个 parseXml 方法来处理,parseXml 方法的代码如下: 1 /* 2 * 解析微信发来的请求(XML) 3 * 4 * param request 封装了请求信息的 HttpServletRequest 对象 5 * return map 解析结果 6 * throws Exception 3 / 25 7 */ 8 public static Map parseXml(HttpServletRequest request) throws Exception 9 / 将解析结果存储在 HashMap 中 10 Map map = new HashMap(); 11 / 从 r

7、equest 中取得输入流 12 InputStream inputStream = request.getInputStream(); 13 / 读取输入流 14 SAXReader reader = new SAXReader(); 15 Document document = reader.read(inputStream); 16 / 得到 xml 根元素 17 Element root = document.getRootElement(); 18 / 得到根元素的所有子节点 19 List elementList = root.elements(); 20 21 / 遍历所有子节点

8、 22 for (Element e : elementList) 23 System.out.println(e.getName() + “|“ + e.getText(); 24 map.put(e.getName(), e.getText(); 25 26 27 / 释放资源 28 inputStream.close(); 29 inputStream = null; 30 return map; 31 然后在处理微信请求的入口 servlet 的 doPost 方法中调用 parseXml 方法即可,调用代码如下: 1 /* 2 * 处理微信服务器发来的消息 3 */ 4 protec

9、ted void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 5 / TODO 接收、处理、响应由微信服务器转发的用户发送给公众帐号的消息 6 / 将请求、响应的编码均设置为 UTF-8(防止中文乱码) 7 request.setCharacterEncoding(“UTF-8“); 8 response.setCharacterEncoding(“UTF-8“); 9 System.out.println(“请求进入“); 10 St

10、ring responseMessage; 11 try 4 / 25 12 /解析微信发来的请求,将解析后的结果封装成 Map 返回 13 Map map = MessageHandlerUtil.parseXml(request); 14 System.out.println(“开始构造响应消息“); 15 responseMessage = MessageHandlerUtil.buildResponseMessage(map); 16 System.out.println(responseMessage); 17 if(responseMessage.equals(“) 18 resp

11、onseMessage =“未正确响应“; 19 20 catch (Exception e) 21 e.printStackTrace(); 22 System.out.println(“发生异常:“+ e.getMessage(); 23 responseMessage =“未正确响应“; 24 25 /发送响应消息 26 response.getWriter().println(responseMessage); 27 这样我们就完成了消息的接收,消息接收之后,我们就要根据消息类型进行响应了,写一个根据消息类型构造返回消息的方法,代码如下: 1 /* 2 * 根据消息类型构造返回消息 3

12、 * param map 封装了解析结果的 Map 4 * return responseMessage(响应消息) 5 */ 6 public static String buildResponseMessage(Map map) 7 /响应消息 8 String responseMessage = “; 9 /得到消息类型 10 String msgType = map.get(“MsgType“).toString(); 11 System.out.println(“MsgType:“ + msgType); 12 /消息类型 13 MessageType messageEnumType

13、 = MessageType.valueOf(MessageType.class, msgType.toUpperCase(); 14 switch (messageEnumType) 15 case TEXT: 16 /处理文本消息 17 responseMessage = handleTextMessage(map); 18 break; 19 case IMAGE: 5 / 25 20 /处理图片消息 21 responseMessage = handleImageMessage(map); 22 break; 23 case VOICE: 24 /处理语音消息 25 responseMessage = handleVoiceMessage(map); 26 break; 27 case VIDEO: 28 /处理视频消息 29 responseMessage = handleVideoMessage(map); 30 break; 31 case SHORTVIDEO: 32 /处理小视频消息 33 responseMessage = handleSmallVideoMessage(map); 3

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号