微信开发专题---6微信消息处理
来源:互联网 发布:软件硬件什么意思 编辑:程序博客网 时间:2024/06/05 06:06
一.微信消息简介
接收普通消息
当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。
请注意:
1、关于重试的消息排重,推荐使用msgid排重。
2、微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,
可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。详情请见“发送消息-被动回复消息”。
3、如果开发者需要对用户消息在5秒内立即做出回应,即使用“发送消息-被动回复消息”接口向用户被动回复消息时,可以在
公众平台官网的开发者中心处设置消息加密。开启加密后,用户发来的消息和开发者回复的消息都会被加密(但开发者通过客服
接口等API调用形式向用户发送消息,则不受影响)。关于消息加解密的详细说明,请见“发送消息-被动回复消息加解密说明”。
各消息类型的推送XML数据包结构如下:
文本消息
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[this is a test]]></Content>
<MsgId>1234567890123456</MsgId>
</xml>
使用网页调试工具调试该接口
图片消息
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[image]]></MsgType> <PicUrl><![CDATA[this is a url]]></PicUrl> <MediaId><![CDATA[media_id]]></MediaId> <MsgId>1234567890123456</MsgId> </xml>
使用网页调试工具调试该接口
语音消息
<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1357290913</CreateTime><MsgType><![CDATA[voice]]></MsgType><MediaId><![CDATA[media_id]]></MediaId><Format><![CDATA[Format]]></Format><MsgId>1234567890123456</MsgId></xml>
使用网页调试工具调试该接口
请注意,开通语音识别后,用户每次发送语音给公众号时,微信会在推送的语音消息XML数据包中,增加一个Recongnition字段(注:由于客户端缓存,开发者开启或者关闭语音识别功能,对新关注者立刻生效,对已关注用户需要24小时生效。开发者可以重新关注此帐号进行测试)。开启语音识别后的语音XML数据包如下:
<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1357290913</CreateTime><MsgType><![CDATA[voice]]></MsgType><MediaId><![CDATA[media_id]]></MediaId><Format><![CDATA[Format]]></Format><Recognition><![CDATA[腾讯微信团队]]></Recognition><MsgId>1234567890123456</MsgId></xml>
参数说明:
视频消息
<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1357290913</CreateTime><MsgType><![CDATA[video]]></MsgType><MediaId><![CDATA[media_id]]></MediaId><ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId><MsgId>1234567890123456</MsgId></xml>
使用网页调试工具调试该接口
小视频消息
<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1357290913</CreateTime><MsgType><![CDATA[shortvideo]]></MsgType><MediaId><![CDATA[media_id]]></MediaId><ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId><MsgId>1234567890123456</MsgId></xml>
使用网页调试工具调试该接口
地理位置消息
<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1351776360</CreateTime><MsgType><![CDATA[location]]></MsgType><Location_X>23.134521</Location_X><Location_Y>113.358803</Location_Y><Scale>20</Scale><Label><![CDATA[位置信息]]></Label><MsgId>1234567890123456</MsgId></xml>
使用网页调试工具调试该接口
链接消息
<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1351776360</CreateTime><MsgType><![CDATA[link]]></MsgType><Title><![CDATA[公众平台官网链接]]></Title><Description><![CDATA[公众平台官网链接]]></Description><Url><![CDATA[url]]></Url><MsgId>1234567890123456</MsgId></xml>
二.JAVA处理消息
执行流程:从微信返回给开发者的数据可以看出为XML,所有我们需要先获取XML消息并解析成JSON字符串,然后在将对应的消息以XML数据格式返回给微信,微信提供给用户。
代码说明:
// 接收消息@RequestMapping(value="/wget",method=RequestMethod.POST)public void getInfo(HttpServletRequest req,HttpServletResponse resp) throws IOException {/*** ====== 1.读取消息 模板消息只有服务号才可以推 ==== ****///BufferedReader br = new BufferedReader(new InputStreamReader(req.getInputStream()));//String str = null;//while((str = br.readLine()) != null){//System.out.println(str);//}// ===== 将消息转换为Map, 注意点 : 消息拍重复 (根据CreateTime)Map<String,String> msgMap = MessageKit.reqMsg2Map(req);// 将XML消息转换为MapString respCon = MessageKit.handlerMsg(msgMap); // 消息处理结果resp.setContentType("application/xml;charset=UTF-8");resp.setCharacterEncoding("UTF-8");System.out.println(respCon);resp.getWriter().write(respCon); // 写回流 }
XML解析工具类
/** * 将读取的xml转换为Map * @param req * @return * @throws IOException */@SuppressWarnings("unchecked")public static Map<String,String> reqMsg2Map(HttpServletRequest req) throws IOException {String xml = req2xml(req);// 读取消息字符串System.out.println(xml);try {Map<String,String> maps = new HashMap<String, String>();Document document = DocumentHelper.parseText(xml);Element root = document.getRootElement();List<Element> eles = root.elements();for(Element e:eles) {maps.put(e.getName(), e.getTextTrim());}return maps; // 转换成功返回} catch (DocumentException e) {e.printStackTrace();}return null;}
/** * 消息处理 * @param msgMap * @return * @throws IOException */public static String handlerMsg(Map<String, String> msgMap) throws IOException {String msgType = msgMap.get("MsgType");System.out.println("获取的Message的类型"+msgType);if(msgType.equals(WeixinFinalValue.MSG_EVENT_TYPE)) { // 事件类型} else if(msgType.equals(WeixinFinalValue.MSG_TEXT_TYPE)) { // 处理文本类型return textTypeHandler(msgMap);} else if(msgType.equals(WeixinFinalValue.MSG_IMAGE_TYPE)) { // 处理图片类型return imageTypeHandler(msgMap,"http://mmbiz.qpic.cn/mmbiz_jpg/5tmbTw8sVweiarRic1DgIX2cekA3cMcBUYIxbWKllJCwicSp6GiaAlcialZsBWbG3mGfRibF8LKfw5tnzfzt2oicbaL0g/0");}return null;}
- 微信开发专题---6微信消息处理
- 微信开发 模板消息
- 微信开发:接收消息
- 微信模版消息开发
- 项目开发-微信公众号被动响应消息处理
- php微信开发备忘-接收处理文本消息
- 微信开发(二)---处理接受的消息
- 微信开发——4、处理各种消息推送
- 微信开发专题---1.注册微信平台账号
- 微信开发专题---3.微信接入认证
- 微信开发专题---4获取access_token
- C#开发微信门户及应用(2)--微信消息的处理和应答
- 使用delphi+intraweb进行微信开发3—微信消息处理
- 【JAVA微信开发】WxMessageSDK-轻量的微信公众号消息处理SDK
- 微信开发-Token处理
- 微信平台下两种消息处理流程
- 微信开发---微信模板消息发送
- 微信公众帐号开发教程第4篇-消息及消息处理工具的封装
- 第十六周项目--学生成绩处理
- 进阶篇:5)标准特征设计:以O型圈沟槽特征为代表
- 【27.85%】【codeforces 743D】Chloe and pleasant prizes
- 第三天04 JAVA基础语法(变量)(学习笔记)
- 笨脑壳(二)
- 微信开发专题---6微信消息处理
- [Leetcode] 29. Divide Two Integers 解题报告
- ThreadLocal 原理探究
- 别到了30岁,你变成你最讨厌的那种中年人
- POI 导出excel
- 16
- ubuntu14.04中安装opencv2.4.9
- 2037 今年暑假不AC 简单贪心算法
- 栈的内排序