来自微信端的事件可以有多种
1:文本消息
2:图片消息
3:语音消息
4:点击按钮事件
5:扫码事件等等
用户发送的消息或者事件 都是以xml的形式发送给我们开发者的(也就是服务器端) 我们也是以xml的格式返回去的
这是开发者文档点击打开链接
所有首先 我们得把用户的消息给获取并解析了(我给出一个工具类类 )
可以看出就是把传过来的request直接传进去就ok了
public static Map<String,String> xmlToMap(HttpServletRequest request) throws IOException, DocumentException{
//用List列表的方式来解析xml,详细见http://www.jb51.net/article/42323.htm
Map<String, String> map =new HashMap<String,String>(); //把客户端传过来的xml数据转换成map格式的数据
SAXReader reader =new SAXReader();
InputStream ins=request.getInputStream();//从request中获取输入流
Document doc =reader.read(ins);// 弄成文本???Xml
Element root =doc.getRootElement();
List<Element> list =root.elements();//获取子节点元素
//list相当于一个变量,List则是标明是何种变量,这样来理解
for(Element e :list){
map.put(e.getName(), e.getText()); //将遍历的结果保存到集合中
}
ins.close();
return map;
}
然后当然就是获取map里面的数据了
所以我们得根据他们的类型(是文字 还在图片 还是点击 ,,)
Map<String ,String> map =BaseMessageUtil.xmlToMap(req); //把服务器传过来的xml格式的数据转换成map
String fromUserName =map.get("FromUserName");//发送方帐号(一个OpenID)
String toUserName =map.get("ToUserName");//开发者微信号
String msgType =map.get("MsgType");//text
String content =map.get("Content");//文本消息内容
请注意 图片的msgtype是image
文字的msgtype是text
语音的msgtype是voice
.....................
但是事件的msgtype都是event (包括点击事件click 关注事件 扫码事件) 区分他们的唯一标示是 他们的map里面有一个event字段 可以将他们区分
获取 String eventType = map.get("Event"); //事件的类型
好了事件获取完毕就开始一一回击吧
刚刚说过 回复也要包装成xml返回的
所以制作完回复消息后就要转换成xml了再输出到微信端【out.print(message);】
消息的制作就以图文消息为例
首先新建一个基本消息父类
package com.po;
public class BaseMessage {
private String ToUserN