package com.jysoft.weChat.util; import java.io.InputStream; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import javax.servlet.http.HttpServletRequest; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class MessageUtil { /** * 解析微信发来的请求(XML) * * @param request * @return map * @throws Exception */ @SuppressWarnings("unchecked") public static Map parseXml(HttpServletRequest request) throws Exception { // 将解析结果存储在HashMap中 Map map = new HashMap(); // 从request中取得输入流 InputStream inputStream = request.getInputStream(); System.out.println("获取输入流"); // 读取输入流 SAXReader reader = new SAXReader(); Document document = reader.read(inputStream); // 得到xml根元素 Element root = document.getRootElement(); // 得到根元素的所有子节点 List elementList = root.elements(); // 遍历所有子节点 for (Element e : elementList) { System.out.println(e.getName() + "|" + e.getText()); map.put(e.getName(), e.getText()); } // 释放资源 inputStream.close(); inputStream = null; return map; } /** * @openID oh0lEwZQQOojVQv3lP2FHVHgzgNk 根据消息类型 构造返回消息 */ public static String buildXml(Map map) { String result; String msgType = map.get("MsgType").toString(); // 取消关注事件 if (msgType.toUpperCase().equals("EVENT") && map.get("Event").toString().toUpperCase().equals("SUBSCRIBE")) { // 第一次关注时,进行授权 String fromUserName = map.get("FromUserName"); result = buildTextMessage(map, "欢迎关注思极锐视服务号,点击此处进行用户绑定!"); } else if (msgType.toUpperCase().equals("TEXT")) { String content = map.get("Content").toString(); if (content.contains("热点")) { result = buildTextMessage(map, "http://5wjr4e.natappfree.cc/"); } else if (content.contains("音乐")) { result = buildMusicMessage(map); } else { result = buildTextMessage(map, "请输入关键字"); } } else { String fromUserName = map.get("FromUserName"); // 开发者微信号 String toUserName = map.get("ToUserName"); result = String.format("" + "" + "" + "%s" + "" + "" + "", fromUserName, toUserName, getUtcTime(), "请回复如下关键词:\n文本\n图片\n语音\n视频\n音乐\n图文"); } return result; } /** * 构造文本消息 * * @param map * @param content * @return */ private static String buildTextMessage(Map map, String content) { // 发送方帐号 String fromUserName = map.get("FromUserName"); // 开发者微信号 String toUserName = map.get("ToUserName"); /** * 文本消息XML数据格式 */ return String.format("" + "" + "" + "%s" + "" + "" + "", fromUserName, toUserName, getUtcTime(), content); } private static String getUtcTime() { Date dt = new Date();// 如果不需要格式,可直接用dt,dt就是当前系统时间 DateFormat df = new SimpleDateFormat("yyyyMMddhhmm");// 设置显示格式 String nowTime = df.format(dt); long dd = (long) 0; try { dd = df.parse(nowTime).getTime(); } catch (Exception e) { } return String.valueOf(dd); } /** * 回复音乐消息 * * @param map * @return */ private static String buildMusicMessage(Map map) { String fromUserName = map.get("FromUserName"); String toUserName = map.get("ToUserName"); String title = "亲爱的路人"; String description = "你想听的音乐"; String hqMusicUrl = "http://www.kugou.com/song/20qzz4f.html?frombaidu#hash=20C16B9CCCCF851D1D23AF52DD963986&album_id=0"; return String.format("" + "" + "" + "%s" + "" + "" + " <![CDATA[%s]]>" + " " + " < ![CDATA[%s] ]>" + // 非必须项 音乐链接 " " + // 非必须项 高质量音乐链接,WIFI环境优先使用该链接播放音乐 "" + "", fromUserName, toUserName, getUtcTime(), title, description, hqMusicUrl, hqMusicUrl); } /** * @Author yeping * @Description 生成6位数字随机验证码 * @Date 2019-11-3 * @Param [] * @return java.lang.String **/ public static String getVerifyCode() { return String.valueOf(new Random().nextInt(899999) + 100000); } }