145 lines
5.1 KiB
Plaintext
145 lines
5.1 KiB
Plaintext
|
|
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<String, String> parseXml(HttpServletRequest request) throws Exception {
|
|||
|
|
// 将解析结果存储在HashMap中
|
|||
|
|
Map<String, String> map = new HashMap<String, String>();
|
|||
|
|
// 从request中取得输入流
|
|||
|
|
InputStream inputStream = request.getInputStream();
|
|||
|
|
System.out.println("获取输入流");
|
|||
|
|
// 读取输入流
|
|||
|
|
SAXReader reader = new SAXReader();
|
|||
|
|
Document document = reader.read(inputStream);
|
|||
|
|
// 得到xml根元素
|
|||
|
|
Element root = document.getRootElement();
|
|||
|
|
// 得到根元素的所有子节点
|
|||
|
|
List<Element> 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<String, String> 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, "欢迎关注思极锐视服务号,<a href='" + Wechatconfig.DNS + Wechatconfig.registerUrl + "?openid=" + fromUserName + "'>点击此处进行用户绑定</a>!");
|
|||
|
|
} 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("<xml>" + "<ToUserName><![CDATA[%s]]></ToUserName>" + "<FromUserName><![CDATA[%s]]></FromUserName>" + "<CreateTime>%s</CreateTime>" + "<MsgType><![CDATA[text]]></MsgType>" + "<Content><![CDATA[%s]]></Content>" + "</xml>", fromUserName, toUserName, getUtcTime(), "请回复如下关键词:\n文本\n图片\n语音\n视频\n音乐\n图文");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 构造文本消息
|
|||
|
|
*
|
|||
|
|
* @param map
|
|||
|
|
* @param content
|
|||
|
|
* @return
|
|||
|
|
*/
|
|||
|
|
private static String buildTextMessage(Map<String, String> map, String content) {
|
|||
|
|
// 发送方帐号
|
|||
|
|
String fromUserName = map.get("FromUserName");
|
|||
|
|
// 开发者微信号
|
|||
|
|
String toUserName = map.get("ToUserName");
|
|||
|
|
/**
|
|||
|
|
* 文本消息XML数据格式
|
|||
|
|
*/
|
|||
|
|
return String.format("<xml>" + "<ToUserName><![CDATA[%s]]></ToUserName>" + "<FromUserName><![CDATA[%s]]></FromUserName>" + "<CreateTime>%s</CreateTime>" + "<MsgType><![CDATA[text]]></MsgType>" + "<Content><![CDATA[%s]]></Content>" + "</xml>", 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<String, String> 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("<xml>" + "<ToUserName><![CDATA[%s]]></ToUserName>" + "<FromUserName><![CDATA[%s]]></FromUserName>" + "<CreateTime>%s</CreateTime>" + "<MsgType><![CDATA[music]]></MsgType>" + "<Music>" + " <Title><![CDATA[%s]]></Title>" + " <Description><![CDATA[%s]]></Description>" + " <MusicUrl>< ![CDATA[%s] ]></MusicUrl>" + // 非必须项 音乐链接
|
|||
|
|
" <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>" + // 非必须项 高质量音乐链接,WIFI环境优先使用该链接播放音乐
|
|||
|
|
"</Music>" + "</xml>", 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);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|