废话少说,先上图,大家加了用了试试。
目前实现微信在线翻译(英-》汉)、快递单、股票信息、天气\PM2.5等功能,当然还有好多彩蛋功能。
下面上主要代码:2个XML,一个是存文字,一个是图片信息。
private final static String menuString="天气:发送地名或者位置。\r\n" + "PM2.5:发送地名或者位置\r\n" + "股票行情:发送股票名称或者是代码 \r\n" + "快递单号:发送快递单号\r\n" + "英文翻译:发送英文单词\r\n"; private static Logger log = Logger.getLogger(ChaXunZhuShouServlet.class .getName()); private static final String RESPONSE_TXT = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>"; private static final String RESPONSE_IMAGE = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType></xml>"; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String signature = req.getParameter("signature"); String timestamp = req.getParameter("timestamp"); String nonce = req.getParameter("nonce"); String echostr = req.getParameter("echostr"); System.out.println("get Method running :" + signature + " : " + timestamp + " : " + nonce + " : " + echostr); PrintWriter out = resp.getWriter(); out.write(echostr); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String signature = req.getParameter("signature"); String timestamp = req.getParameter("timestamp"); String nonce = req.getParameter("nonce"); String echostr = req.getParameter("echostr"); Scanner scanner = new Scanner(req.getInputStream(), "utf-8"); resp.setContentType("application/xml"); resp.setCharacterEncoding("UTF-8"); PrintWriter out = resp.getWriter(); log.info(signature + " : " + timestamp + " : " + nonce + " : " + echostr); try { // 1、获取用户发送的信息 StringBuffer sb = new StringBuffer(100); while (scanner.hasNextLine()) { sb.append(scanner.nextLine()); } System.out.println("获取用户输入的数据!" + sb.toString()); // 2、解析用户的信息 JAXBContext jc = JAXBContext.newInstance(WeChatReqBean.class); Unmarshaller u = jc.createUnmarshaller(); WeChatReqBean reqBean = (WeChatReqBean) u .unmarshal(new StringReader(sb.toString())); WeChatRespBean respBean=null; if (reqBean.getMsgType().equals(WeixinConstants.MSGTYPE_EVENT)) { // 这是新用户关注时默认发的一条信息。可以做一个欢迎处理。 respBean=new WeChatRespBean(); respBean.setMsgType(WeixinConstants.MSGTYPE_TEXT); respBean.setContent("感谢您关注手机查询助手," + menuString); } else if (reqBean.getMsgType().equals(WeixinConstants.MSGTYPE_TEXT)) { String keyword = reqBean.getContent(); respBean=CommonInfoGet.getContent(keyword); }else if(reqBean.getMsgType().equals(WeixinConstants.MSGTYPE_LOCATION)){ respBean=LocaltionInfo.getLocaltionInfo(reqBean); }else { respBean=new WeChatRespBean(); respBean.setMsgType(WeixinConstants.MSGTYPE_TEXT); respBean.setContent("我暂时还不懂您的意思\r\n" + menuString); } String reponseXml=RESPONSE_TXT; String type="text"; if(null!=respBean.getMsgType()){ if( respBean.getMsgType().equals(WeixinConstants.MSGTYPE_IMAGE)){ String xml=XmlUtil.appendXmlInNode(RESPONSE_IMAGE,respBean.getArticles()); reponseXml=xml; type="news"; } }else{ respBean.setMsgType(WeixinConstants.MSGTYPE_TEXT); respBean.setContent("我暂时还不懂您的意思\r\n" + menuString); } out.printf(reponseXml, reqBean.getFromUserName(), reqBean .getToUserName(), System.currentTimeMillis(), type, respBean.getContent()); } catch (Exception e) { e.printStackTrace(); } finally { if (scanner != null) { scanner.close(); scanner = null; } if (out != null) { out.close(); out = null; } } }
核心数据取值类:
public class CommonInfoGet { public static WeChatRespBean getContent(String keyword) throws IOException { WeChatRespBean responseBean=new WeChatRespBean(); if(keyword.length()>=FetchExpressInfo.minLength && keyword.length()<=FetchExpressInfo.maxLength){ String expressStr=FetchExpressInfo.getExpressInfo(keyword); if(!"".equals(expressStr)){ responseBean.setContent(expressStr); responseBean.setMsgType(WeixinConstants.MSGTYPE_TEXT); return responseBean; } } if(IsChineseOrEnglish.strIsEnglish(keyword)){ String translate=TranslateInfo.getTranslateInfo(keyword); if(!"".equals(translate)){ responseBean.setContent(translate); responseBean.setMsgType(WeixinConstants.MSGTYPE_TEXT); return responseBean; } } StringBuffer returnStr=new StringBuffer(); StringReader read = new StringReader(keyword); IKSegmenter ik = new IKSegmenter(read, true); Lexeme lex = null; boolean stock=false; boolean area=false; String stockCode=""; SingleInfo info=SingleInfo.getStockSingleInfo(); System.out.println("SingleInfo="+info); Map<String,String> stockMap=info.getStockMap(); Map<String,String> areaMap=info.getAreaMap(); String mapAreaName=""; while((lex=ik.next())!=null){ String str = lex.getLexemeText(); System.out.println(str + "\t"); if(stockMap.containsKey(str)){ stockCode=stockMap.get(str); stock=true; } if(areaMap.containsKey(str)){ area=true; mapAreaName=areaMap.get(str); } } if(stock){ returnStr.append(FetchStockInfo.findStockInfo(stockCode)); returnStr.append("\r\n"); responseBean.setContent(returnStr.toString()); responseBean.setMsgType(WeixinConstants.MSGTYPE_TEXT); } if(area){ WeatherInfo.getWeatherInfo(keyword,mapAreaName,responseBean); PMInfo.getPMInfo(keyword,mapAreaName,responseBean); } return responseBean; } }
欢迎大家关注提意见。谢谢。