微信开发专题---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>


参数描述ToUserName开发者微信号FromUserName发送方帐号(一个OpenID)CreateTime消息创建时间 (整型)MsgTypetextContent文本消息内容MsgId消息id,64位整型

使用网页调试工具调试该接口

图片消息

<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>


参数描述ToUserName开发者微信号FromUserName发送方帐号(一个OpenID)CreateTime消息创建时间 (整型)MsgTypeimagePicUrl图片链接(由系统生成)MediaId图片消息媒体id,可以调用多媒体文件下载接口拉取数据。MsgId消息id,64位整型

使用网页调试工具调试该接口

语音消息

<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>


参数描述ToUserName开发者微信号FromUserName发送方帐号(一个OpenID)CreateTime消息创建时间 (整型)MsgType语音为voiceMediaId语音消息媒体id,可以调用多媒体文件下载接口拉取数据。Format语音格式,如amr,speex等MsgID消息id,64位整型

使用网页调试工具调试该接口


请注意,开通语音识别后,用户每次发送语音给公众号时,微信会在推送的语音消息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>

参数说明:

参数描述ToUserName开发者微信号FromUserName发送方帐号(一个OpenID)CreateTime消息创建时间 (整型)MsgType语音为voiceMediaID语音消息媒体id,可以调用多媒体文件下载接口拉取该媒体Format语音格式:amrRecognition语音识别结果,UTF8编码MsgID消息id,64位整型

视频消息

<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>


参数描述ToUserName开发者微信号FromUserName发送方帐号(一个OpenID)CreateTime消息创建时间 (整型)MsgType视频为videoMediaId视频消息媒体id,可以调用多媒体文件下载接口拉取数据。ThumbMediaId视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。MsgId消息id,64位整型

使用网页调试工具调试该接口

小视频消息

<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>


参数描述ToUserName开发者微信号FromUserName发送方帐号(一个OpenID)CreateTime消息创建时间 (整型)MsgType小视频为shortvideoMediaId视频消息媒体id,可以调用多媒体文件下载接口拉取数据。ThumbMediaId视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。MsgId消息id,64位整型

使用网页调试工具调试该接口

地理位置消息

<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>


参数描述ToUserName开发者微信号FromUserName发送方帐号(一个OpenID)CreateTime消息创建时间 (整型)MsgTypelocationLocation_X地理位置维度Location_Y地理位置经度Scale地图缩放大小Label地理位置信息MsgId消息id,64位整型

使用网页调试工具调试该接口

链接消息

<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>


参数描述ToUserName接收方微信号FromUserName发送方微信号,若为普通用户,则是一个OpenIDCreateTime消息创建时间MsgType消息类型,linkTitle消息标题Description消息描述Url消息链接MsgId消息id,64位整型

二.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;}


0 0
原创粉丝点击