之前写了怎么配置主菜单以后二级菜单里面的属性,今天来讲解一下怎么使他们生效,先看一下官方文档怎么描述的:
用户点击自定义菜单后,微信会把点击事件推送给开发者,请注意,点击菜单弹出子菜单,不会产生上报。
点击菜单拉取消息时的事件推送
推送XML数据包示例:
<xml><ToUserName>< ![CDATA[toUser] ]></ToUserName><FromUserName>< ![CDATA[FromUser] ]></FromUserName><CreateTime>123456789</CreateTime><MsgType>< ![CDATA[event] ]></MsgType><Event>< ![CDATA[CLICK] ]></Event><EventKey>< ![CDATA[EVENTKEY] ]></EventKey></xml>
参数说明:
参数 | 描述 |
---|---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | 消息类型,event |
Event | 事件类型,CLICK |
EventKey | 事件KEY值,与自定义菜单接口中KEY值对应 |
当用户点击之后微信微信会把点击事件推送给开发者,你需要做的是把信息接收下来,组装实体类,给用户返回,代码如下:
@RequestMapping(value = "/signature")
@ResponseBody
public String xmlToMap(HttpServletRequest request,@RequestParam String signature, @RequestParam String timestamp,
@RequestParam String nonce) {
Map<String, String> map = new HashMap<String, String>();
try {
SAXReader reader = new SAXReader();
InputStream ins = null;
try {
ins = request.getInputStream();
} catch (IOException e1) {
e1.printStackTrace();
}
Document doc = null;
try {
doc = reader.read(ins);
} catch (DocumentException e1) {
e1.printStackTrace();
}
Element root = doc.getRootElement();
@SuppressWarnings("unchecked")
List<Element> list = root.elements();
for (Element e : list) {
map.put(e.getName(), e.getText());
}
try {
ins.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}catch (Exception e){
PlatformLogger.error("错误信息",e);
}
return messageImpl.messgage(map);
}
上面的代码是不是很熟悉,之前已经写过了,在关注的时候,这个地址是微信给开发者发送信息的一个地址,写一次就好,
public class TextMessage {
private String ToUserName;
private String FromUserName;
private Long CreateTime;
private String MsgType;
private String Content;
public String getContent() {
return Content;
}
public void setContent(String content) {
Content = content;
}
public String getToUserName() {
return ToUserName;
}
public void setToUserName(String toUserName) {
ToUserName = toUserName;
}
public String getFromUserName() {
return FromUserName;
}
public void setFromUserName(String fromUserName) {
FromUserName = fromUserName;
}
public Long getCreateTime() {
return CreateTime;
}
public void setCreateTime(Long createTime) {
CreateTime = createTime;
}
public String getMsgType() {
return MsgType;
}
public void setMsgType(String msgType) {
MsgType = msgType;
}
}
创建一个符合官方文档的实体类。
public String messgage(Map<String,String> requestMap){
String textMsgXml = "";
if (requestMap.size()>0) {
String fromUserName = requestMap.get("FromUserName");
// 公众帐号
String toUserName = requestMap.get("ToUserName");
// 消息类型
String msgType = requestMap.get("MsgType");
String eventKey = requestMap.get("EventKey");
String event = requestMap.get("Event");
if (eventKey.equals("31")) {
TextMessage textMessage = new TextMessage();
textMessage.setToUserName(fromUserName);
textMessage.setFromUserName(toUserName);
textMessage.setCreateTime(new Date().getTime());
textMessage.setMsgType("text");
textMessage.setContent("你好c");
XStream xStream = new XStream();
xStream.alias("xml", textMessage.getClass());
textMsgXml = xStream.toXML(textMessage);
}
if (eventKey.equals("32")) {
TextMessage textMessage = new TextMessage();
textMessage.setToUserName(fromUserName);
textMessage.setFromUserName(toUserName);
textMessage.setCreateTime(new Date().getTime());
textMessage.setMsgType("text");
textMessage.setContent("你好c");
XStream xStream = new XStream();
xStream.alias("xml", textMessage.getClass());
textMsgXml = xStream.toXML(textMessage);
}
if (event.equals("subscribe")) {
TextMessage textMessage = new TextMessage();
textMessage.setToUserName(fromUserName);
textMessage.setFromUserName(toUserName);
textMessage.setCreateTime(new Date().getTime());
textMessage.setMsgType("text");
textMessage.setContent("你好c!");
XStream xStream = new XStream();
xStream.alias("xml", textMessage.getClass());
textMsgXml = xStream.toXML(textMessage);
}
}
return textMsgXml;
}
关注和这个事件可以写在一起,而eventKey这个属性是在主菜单那个方法里面写的,如果忘了可以回去看一下那章,这里不做解释了。
更多java的知识扫描下方二维码关注公众号,每天更新哦。