package org.yeshi.utils.wx; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; import javax.servlet.http.HttpServletRequest; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.yeshi.utils.HttpUtil; import org.yeshi.utils.StringUtil; import com.qq.weixin.mp.aes.AesException; import com.qq.weixin.mp.aes.WXBizMsgCrypt; import net.sf.json.JSONObject; public class WXUtil { public static String getContent(HttpServletRequest req) { try { byte[] buffer = new byte[2048]; int readBytes = 0; StringBuilder stringBuilder = new StringBuilder(); while ((readBytes = req.getInputStream().read(buffer)) > 0) { stringBuilder.append(new String(buffer, 0, readBytes)); } return stringBuilder.toString(); } catch (Exception e) { } return null; } @SuppressWarnings("unchecked") public static Map parseXML(HttpServletRequest req) { SAXReader reader = new SAXReader(); try { byte[] buffer = new byte[2048]; int readBytes = 0; StringBuilder stringBuilder = new StringBuilder(); while ((readBytes = req.getInputStream().read(buffer)) > 0) { stringBuilder.append(new String(buffer, 0, readBytes)); } InputStream inputStream = new ByteArrayInputStream(stringBuilder.toString().getBytes()); Map map = new HashMap(); Document document = reader.read(inputStream); Element root = document.getRootElement(); // 得到根元素的所有子节点 List elementList = root.elements(); // 遍历所有子节点 for (Element e : elementList) map.put(e.getName(), e.getText()); inputStream.close(); inputStream = null; return map; } catch (Exception e) { e.printStackTrace(); } return null; } // 获取微信回调的内容 public static String getWXXMLBody(HttpServletRequest req) { byte[] buffer = new byte[2048]; int readBytes = 0; StringBuilder stringBuilder = new StringBuilder(); try { while ((readBytes = req.getInputStream().read(buffer)) > 0) { stringBuilder.append(new String(buffer, 0, readBytes)); } } catch (Exception e) { } return stringBuilder.toString(); } @SuppressWarnings("unchecked") public static Map parseXML(String content, String msgSignature, String timeStamp, String nonce, String token, String encodingAesKey, String appId) { SAXReader reader = new SAXReader(); try { String result = ""; try { WXBizMsgCrypt pc = new WXBizMsgCrypt(token, encodingAesKey, appId); result = pc.DecryptMsg(msgSignature, timeStamp, nonce, content); } catch (AesException e1) { e1.printStackTrace(); } InputStream inputStream = new ByteArrayInputStream(result.getBytes()); Map map = new HashMap(); Document document = reader.read(inputStream); Element root = document.getRootElement(); // 得到根元素的所有子节点 List elementList = root.elements(); // 遍历所有子节点 for (Element e : elementList) map.put(e.getName(), e.getText()); inputStream.close(); inputStream = null; return map; } catch (Exception e) { e.printStackTrace(); } return null; } @SuppressWarnings("unchecked") public static Map parseXML(HttpServletRequest req, String pwd) { SAXReader reader = new SAXReader(); try { byte[] buffer = new byte[2048]; int readBytes = 0; StringBuilder stringBuilder = new StringBuilder(); while ((readBytes = req.getInputStream().read(buffer)) > 0) { stringBuilder.append(new String(buffer, 0, readBytes)); } System.out.println(stringBuilder.toString()); InputStream inputStream = new ByteArrayInputStream(stringBuilder.toString().getBytes()); Map map = new HashMap(); Document document = reader.read(inputStream); Element root = document.getRootElement(); // 得到根元素的所有子节点 List elementList = root.elements(); // 遍历所有子节点 for (Element e : elementList) map.put(e.getName(), e.getText()); inputStream.close(); inputStream = null; return map; } catch (Exception e) { e.printStackTrace(); } return null; } @SuppressWarnings("unchecked") public static Map parseXML(String data) { SAXReader reader = new SAXReader(); try { InputStream inputStream = new ByteArrayInputStream(data.getBytes("UTF-8")); Map map = new HashMap(); Document document = reader.read(inputStream); Element root = document.getRootElement(); // 得到根元素的所有子节点 List elementList = root.elements(); // 遍历所有子节点 for (Element e : elementList) map.put(e.getName(), e.getText()); inputStream.close(); inputStream = null; return map; } catch (Exception e) { e.printStackTrace(); } return null; } public static String loadWXMessage(Map map) { Set set = map.keySet(); Iterator its = set.iterator(); String xml = ""; while (its.hasNext()) { String key = its.next(); String value = map.get(key); xml += String.format("<%1$s>", key, value, key); } xml += ""; return xml; } public static String getSignMD5(Map map, String k) { Map tm = new TreeMap(); tm.putAll(map); Set set = tm.keySet(); Iterator its = set.iterator(); String result = ""; while (its.hasNext()) { String key = its.next(); String val = tm.get(key); result += key + "=" + val + "&"; } result += "key=" + k; return StringUtil.Md5(result).toUpperCase(); } public static String getAcessToken(String appId, String appSecret) { String tokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + appSecret; String token = HttpUtil.get(tokenUrl); String access_token = JSONObject.fromObject(token).optString("access_token"); return access_token; } // 获取详细的用户信息 public static JSONObject getDetailGZUserInfo(String openId, String accessToken) { String url = String.format("https://api.weixin.qq.com/cgi-bin/user/info?access_token=%s&openid=%s&lang=zh_CN", accessToken, openId); String result = HttpUtil.get(url); return JSONObject.fromObject(result); } // 创建菜单 public static void createMenu(String accessToken, JSONObject root) { HttpUtil.post("https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=" + accessToken); // 创建菜单再 String url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + accessToken; String result = HttpUtil.post(url, root.toString()); } }