package com.nko.utils; import java.io.IOException; import java.util.Date; import java.util.List; import net.sf.json.JSONArray; import com.nko.bean.Keyword; import com.nko.bean.Parameter; public class DisposeMessage { // static final String MESSAGESAVEDPATH = "F:\\code workspace\\CebbankCreditedCard\\WebRoot\\Files\\savedMessage"; static final String MESSAGESAVEDPATH = "C:\\Wechat\\Files\\"; /** * * @param wechatXML 微信封装的XML用户消息 * @return * @throws IOException */ public static Parameter getMostlyParameter(String wechatXML) throws IOException { Parameter param = new Parameter(); param.setFromUserName(substring(wechatXML, "<FromUserName><![CDATA[")); param.setToUserName(substring(wechatXML, "<ToUserName><![CDATA[")); param.setMsgType(substring(wechatXML, "<MsgType><![CDATA[")); if(param.getMsgType().equals("text") || param.getMsgType().equals("link")) param.setContent(substring(wechatXML, "<Content><![CDATA[")); if(param.getMsgType().equals("event")) { param.setEvent(substring(wechatXML, "<Event><![CDATA[")); param.setEventKey(substring(wechatXML, "<EventKey><![CDATA[")); } param.setTime(substring(wechatXML, "<CreateTime>")); JSONArray json = new JSONArray(); try { json = JSONArray.fromObject(param); } catch (Exception e) { e.printStackTrace(); } DisposeFile.WriteFile(MESSAGESAVEDPATH, json.toString().getBytes()); return param; } public static String substring(String wechatXML, String lblPri) { String lblEnd = "</CreateTime>"; if(lblPri.contains("CDATA")) lblEnd = "]]></" + lblPri.substring(1, lblPri.indexOf("><")) + ">"; return wechatXML.substring(wechatXML.indexOf(lblPri) + lblPri.length(), wechatXML.indexOf(lblEnd)); } /** * 处理并回复消息 * @param param * @param basePath * @return */ public static String replyMSG(Parameter param, String basePath) { String toUser = param.getToUserName(); String fromUser = param.getFromUserName(); if (param.getMsgType().equals("event")) { if(param.getEvent().equals("subscribe")) { // 添加关注 // 从配置文件中读取自动回复内容,暂时只回复一条 List<Parameter> params = (List<Parameter>) DisposeFile.readFile("subscribeAutoReply.json"); param = params.get(0); param.setToUserName(toUser); param.setFromUserName(fromUser); } } else if (param.getMsgType().equals("text")) { // 从配置文件中读取自动回复内容 List<Keyword> keywords = (List<Keyword>) DisposeFile.readFile("keywordAutoReply.json"); boolean hasKey = false; // 标识是否存在关键词定义 for(Keyword keyword : keywords) { if(param.getContent().equals(keyword.getKey())) { hasKey = true; param = keyword.getParam(); param.setToUserName(toUser); param.setFromUserName(fromUser); } } if(!hasKey) { List<Parameter> params = (List<Parameter>) DisposeFile.readFile("othersAutoReply.json"); param = params.get(0); param.setToUserName(toUser); param.setFromUserName(fromUser); } // if (param.getContent().contains("百度")) { // param.setContent("<a href=\"http://www.baidu.com\">百度</a>"); // } else if (param.getContent().equals("图文")) { // param.setMsgType("news"); // param.setPicUrl(basePath); // TODO: del // param.setContent("此处显示的是大标题"); // /* param.setContent("这条消息用来显示图文"); // Parameter p = new Parameter(); // List<Parameter> params = new ArrayList<Parameter>(); // p.setTitle("图文消息1"); // p.setPicUrl(basePath + "/Image/1.png"); // p.setDescription("description"); // p.setUrl("http://www.baidu.com"); // params.add(p); // param.setItem(params);*/ // } else // param.setContent("您刚刚说的是:" + param.getContent()); } // TODO: servlet /valiCard JSONArray json = JSONArray.fromObject(param); DisposeFile.WriteFile(MESSAGESAVEDPATH, json.toString().getBytes()); return getReXML(param); } /** * * @param param * @param type * @param content * 如果type的值为text,则值为要发送的文本 * 如果type的值为image/link,则值为url * @return */ public static String getReXML(Parameter param) { StringBuffer reXML = new StringBuffer("<xml>"); reXML.append("<ToUserName><![CDATA[" + param.getFromUserName() + "]]></ToUserName>"); reXML.append("<FromUserName><![CDATA[" + param.getToUserName() + "]]></FromUserName>"); reXML.append("<CreateTime>" + new Date().getTime() + "</CreateTime>"); reXML.append("<MsgType><![CDATA[" + param.getMsgType() + "]]></MsgType>"); if (param.getMsgType().equals("text")) { reXML.append("<Content><![CDATA[" + param.getContent() + "]]></Content>"); } else if (param.getMsgType().equals("news")) { reXML.append("<Content>" + param.getContent() + "</Content>"); reXML.append("<ArticleCount>" + 2 + "</ArticleCount>"); reXML.append("<Articles>"); reXML.append("<item>"); reXML.append("<Title><![CDATA[10号线故障]]></Title>"); reXML.append("<Description><![CDATA[description1]]></Description>"); reXML.append("<PicUrl><![CDATA[" + param.getPicUrl() + "/Image/2.png" + "]]></PicUrl>"); reXML.append("<Url><![CDATA[url]]></Url>"); reXML.append("</item>"); reXML.append("<item>"); reXML.append("<Title><![CDATA[]]></Title>"); reXML.append("<Description><![CDATA[description2]]></Description>"); reXML.append("<PicUrl><![CDATA[" + param.getPicUrl() + "/Image/1.png" + "]]></PicUrl>"); reXML.append("<Url><![CDATA[url]]></Url>"); reXML.append("</item>"); reXML.append("</Articles>"); } return reXML.toString(); } public static void main(String[] args) throws IOException { StringBuffer sb = new StringBuffer(); sb.append("<xml>"); sb.append("<ToUserName><![CDATA[toUser]]></ToUserName>"); sb.append("<FromUserName><![CDATA[fromUser]]></FromUserName>"); sb.append("<CreateTime>1373165836587</CreateTime>"); sb.append("<MsgType><![CDATA[link]]></MsgType>"); sb.append("<Content><![CDATA[<a href=\"http://www.baidu.com\">这是百度链接</a>]]></Content>"); sb.append("</xml>"); String wechatXML = sb.toString(); Parameter param = DisposeMessage.getMostlyParameter(wechatXML); param.setCategory("发送"); // System.out.println(DisposeMessage.saveMessage("")); JSONArray json = JSONArray.fromObject(param); System.out.println(json); } }
最近下载更多
liu2022 LV14
2022年7月31日
dongzhan LV12
2021年12月16日
Tayirjan LV11
2021年12月1日
tcloud LV1
2021年10月30日
陈志远 LV1
2021年9月8日
seiseisizuka LV1
2021年8月5日
yuzhang LV2
2021年2月1日
wfqdxdx LV6
2020年5月21日
MrZive LV6
2020年5月6日
linghongjun5002 LV10
2020年4月15日
最近浏览更多
libo1212 LV8
6月17日
Luck_ZDM LV12
5月31日
Gin19960217 LV4
1月12日
jerryPang LV1
2023年6月28日
井晓码
2023年4月14日
暂无贡献等级
dengjunjun LV15
2023年1月11日
uni-code_0123 LV1
2022年11月3日
babyFF9 LV8
2022年9月26日
微信网友_6139616720490496 LV1
2022年9月19日
xiex909 LV27
2022年8月19日