微信公衆帳號開發模式純JSP代碼

<%@ page import="java.net." %> <%@ page import="java.math." %> <%@ page import="java.io." %> <%@ page import="java.text."%> <%@page import="java.util.Date"%> <%@page import="org.dom4j.Element"%> <%@page import="org.dom4j.DocumentHelper"%> <%@page import="org.dom4j.Document"%> <%@page import="java.io.IOException"%> <%@page import="java.io.InputStreamReader"%> <%@page import="java.io.BufferedReader"%> <%@page import="java.io.Reader"%> <%@page import="java.security.MessageDigest"%> <%@page import="java.util.Arrays"%> <%@page import="java.util.ArrayList"%> <%@page import="java.util.Collections"%> <%@page import="java.util.List"%> <%@page import="java.util.regex.Matcher"%> <%@page import="java.util.regex.Pattern"%>html

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <% //WeiXinHandler爲內部類不能使用非final類型的對象java

final String TOKEN="daniuco";//此處填寫本身的TOKEN參數,見開發模式 final HttpServletRequest final_request=request;
final HttpServletResponse final_response=response; %>api

<% class WeiXinHandler{ public void valid(){ String echostr=final_request.getParameter("echostr"); if(null==echostr||echostr.isEmpty()) { responseMsg(); }else{ if(this.checkSignature()) { this.print(echostr); }else{ this.print("error");
} } }數組

//自動回覆內容 public void responseMsg()服務器

{ String postStr=null; try{ postStr=this.readStreamParameter(final_request.getInputStream()); //System.out.print(postStr);微信

}catch(Exception e)
{ e.printStackTrace(); } 
    //System.out.println(postStr);

if (null!=postStr&&!postStr.isEmpty()) { Document document=null; try{ document = DocumentHelper.parseText(postStr); }catch(Exception e){ e.printStackTrace(); }網絡

if(null==document) { this.print(""); return; }app

Element root=document.getRootElement(); String fromUsername = root.elementText("FromUserName"); String toUsername = root.elementText("ToUserName"); String keyword = root.elementTextTrim("Content"); long longTime = new Date().getTime(); String time = longTime/1000 +""; String msgType = root.elementText("MsgType"); String event = root.elementText("Event");dom

String textTpl = "<xml>"+ "<ToUserName><![CDATA[%1$s]]></ToUserName>"+ "<FromUserName><![CDATA[%2$s]]></FromUserName>"+ "<CreateTime>%3$s</CreateTime>"+ "<MsgType><![CDATA[%4$s]]></MsgType>"+ "<Content><![CDATA[%5$s]]></Content>"+ "<FuncFlag>0</FuncFlag>"+ "</xml>";post

String htmlTpl = "<xml>"+ "<ToUserName><![CDATA[%1$s]]></ToUserName>"+ "<FromUserName><![CDATA[%2$s]]></FromUserName>"+ "<CreateTime>%3$s</CreateTime>"+ "<MsgType><![CDATA[%4$s]]></MsgType>" + "[%5$s]" + "</Articles></xml>";

//公用幫助文檔 String helpHtml = "\n任什麼時候候,回覆"help"或者"幫助"或者"?"三者之一獲取最新使用手冊。\n\n分類信息([c:新聞],[c:公告],[c:研報]等)\n歷史信息([2013-10-05]:某天信息,[d:9]:過去9天以內的信息,[d:-9]:過去9天以前的信息,默認查詢範圍10天以內)";

if(null!=msgType && !msgType.equals("")) { /** *事件類型 */ if(msgType.equals("event") && event.equals("subscribe")) { //訂閱 String subscribeHtml = ""; msgType = "news";

//String helpHtml  =  "\n任什麼時候候,回覆\"help\"或者\"幫助\"兩者之一獲取最新使用手冊。\n分類信息(c:新聞,c:公告,c:研報)\n歷史信息([2013-10-05]:某天信息,[d:9]:過去9天以內的信息,[d:-9]:過去9天以前的信息,默認查詢範圍10天以內)";
  String helpPicUrl = "http://www.daniu.co/images/weixin/finance_travel_640_320.jpg";
  String helpContentUrl = "";

  String helpResults = "<item><Title><![CDATA[歡迎開啓財富新旅程]]></Title><Description><![CDATA[" + helpHtml + "]]></Description><PicUrl><![CDATA[" + helpPicUrl +"]]></PicUrl><Url><![CDATA[" + helpContentUrl + "]]></Url></item>";
  helpResults = "<ArticleCount>1</ArticleCount><Articles>"+ helpResults;

  subscribeHtml = helpResults;

  //System.out.println(subscribeHtml);

  String resultStr = htmlTpl.format(htmlTpl, fromUsername, toUsername, time, msgType, subscribeHtml);


  this.print(resultStr);

}

if(msgType.equals("event") && event.equals("unsubscribe")) { //退訂 String subscribeHtml = ""; msgType = "news";

helpHtml  =  "\n感謝關注daniuco\n\n你訂或不訂,我都在這裏,勤勤懇懇... ...";
  String helpPicUrl = "http://www.daniu.co/images/weixin/finance_640_320.png";
  String helpContentUrl = "";

  String helpResults = "<item><Title><![CDATA[感謝關注金融互聯網]]></Title><Description><![CDATA[" + helpHtml + "]]></Description><PicUrl><![CDATA[" + helpPicUrl +"]]></PicUrl><Url><![CDATA[" + helpContentUrl + "]]></Url></item>";
  helpResults = "<ArticleCount>1</ArticleCount><Articles>"+ helpResults;

  subscribeHtml = helpResults;

  //System.out.println(subscribeHtml);

  String resultStr = htmlTpl.format(htmlTpl, fromUsername, toUsername, time, msgType, subscribeHtml);


  this.print(resultStr);

}

}

if(null!=keyword&&!keyword.equals("")) {

/** * *回覆文本信息

String msgType = "text";

String contentStr = "系統在開發過程當中,敬請期待!"; if(keyword.equals("help") || keyword.equals("幫助")) {//使用手冊 contentStr = contentStr + "\n使用手冊正在設計中,您能夠在之後使用過程當中,回覆"help"或者"幫助"兩者之一獲取最新使用手冊。"; } //Autonomy Search contentStr = contentStr + "\n===自動推送測試內容===\n"+ AutonomySearch(keyword);

String resultStr = textTpl.format(textTpl, fromUsername, toUsername, time, msgType, contentStr);

/** *回覆文本信息結束 */

/** *回覆圖文信息,最多6條(微信支持10條) */

msgType = "news"; String contentHtml = "";//用戶請求關鍵字

if(keyword.equals("help") || keyword.equals("幫助") || keyword.equals("?") || keyword.equals("?")) {//使用手冊 //String helpHtml = "\n任什麼時候候,回覆"help"或者"幫助"兩者之一獲取最新使用手冊。\n分類信息(c:新聞,c:公告,c:研報)\n歷史信息([2013-10-05]:某天信息,[d:9]:過去9天以內的信息,[d:-9]:過去9天以前的信息,默認查詢範圍10天以內)";

String helpPicUrl = "http://www.daniu.co/images/weixin/help_640_320.png";
  String helpContentUrl = "";

  String helpResults = "<item><Title><![CDATA[由大牛網提供的財富新體驗]]></Title><Description><![CDATA[" + helpHtml + "]]></Description><PicUrl><![CDATA[" + helpPicUrl +"]]></PicUrl><Url><![CDATA["+ helpContentUrl +"]]></Url></item>";
  helpResults = "<ArticleCount>1</ArticleCount><Articles>"+ helpResults;

  String resultStr = htmlTpl.format(htmlTpl, fromUsername, toUsername, time, msgType, helpResults);
  this.print(resultStr);

}else {//智能回覆

String reqTpl = "<xml><ToUserName><![CDATA[%1$s]]></ToUserName><FromUserName><![CDATA[%2$s]]></FromUserName><CreateTime>%3$s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[" + keyword + "]]></Content><MsgId>5937584354468300645</MsgId><OpenId>daniuco</OpenId></xml>";
  String reqStr = reqTpl.format(reqTpl,toUsername, fromUsername, time);//將原始請求信息發送到智能引擎,注意toUsername,fromUsername位置

  contentHtml = getRemoteXML(reqStr);
 // System.out.print(contentHtml);
  //返回信息到微信服務器
  this.print(contentHtml);

}

//返回信息到微信服務器 //this.print(resultStr); }else{ this.print("Input something..."); } }else { this.print(""); } }

//微信接口驗證 public boolean checkSignature(){ String signature = final_request.getParameter("signature"); String timestamp = final_request.getParameter("timestamp"); String nonce = final_request.getParameter("nonce"); String token=TOKEN; String[] tmpArr={token,timestamp,nonce}; Arrays.sort(tmpArr); String tmpStr=this.ArrayToString(tmpArr); tmpStr=this.SHA1Encode(tmpStr); if(tmpStr.equalsIgnoreCase(signature)){ return true; }else{ return false; } }

//向請求端發送返回數據 public void print(String content){ try{ final_response.getWriter().print(content); final_response.getWriter().flush(); final_response.getWriter().close(); }catch(Exception e){ } } //數組轉字符串 public String ArrayToString(String [] arr){ StringBuffer bf = new StringBuffer(); for(int i = 0; i < arr.length; i++){ bf.append(arr[i]); } return bf.toString(); }

//sha1加密 public String SHA1Encode(String sourceString) { String resultString = null; try { resultString = new String(sourceString); MessageDigest md = MessageDigest.getInstance("SHA-1"); resultString = byte2hexString(md.digest(resultString.getBytes())); } catch (Exception ex) { } return resultString; } public final String byte2hexString(byte[] bytes) { StringBuffer buf = new StringBuffer(bytes.length * 2); for (int i = 0; i < bytes.length; i++) { if (((int) bytes[i] & 0xff) < 0x10) { buf.append("0"); } buf.append(Long.toString((int) bytes[i] & 0xff, 16)); } return buf.toString().toUpperCase(); } //從輸入流讀取post參數

public String readStreamParameter(ServletInputStream in){ StringBuilder buffer = new StringBuilder(); BufferedReader reader=null; try{ reader = new BufferedReader(new InputStreamReader(in)); String line=null; while((line = reader.readLine())!=null){ buffer.append(line); } }catch(Exception e){ e.printStackTrace(); }finally{ if(null!=reader){ try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return buffer.toString(); }

}%>

<%! public String getRemoteXML(String reqStr) { HttpURLConnection url_con = null; String responseContent = null;

String daniucoUrl = "http://www.daniu.co/openapi";
 try
    {

        URL url = new URL(daniucoUrl);
        url_con = (HttpURLConnection) url.openConnection();
        url_con.setRequestMethod("POST");
        url_con.setDoOutput(true);
        byte[] b = reqStr.getBytes();
        url_con.getOutputStream().write(b, 0, b.length);
        url_con.getOutputStream().flush();
        url_con.getOutputStream().close();

        InputStream in = url_con.getInputStream();
        BufferedReader rd = new BufferedReader(new InputStreamReader(in,
                "utf-8"));
        String tempLine = rd.readLine();
        StringBuffer tempStr = new StringBuffer();
        String crlf=System.getProperty("line.separator");
        while (tempLine != null)
        {
            tempStr.append(tempLine);
            tempStr.append(crlf);
            tempLine = rd.readLine();
        }
        responseContent = tempStr.toString();
        rd.close();
        in.close();
    }
    catch (IOException e)
    {
        //System.out.print("網絡故障", e);
    }
    finally
    {
        if (url_con != null)
        {
            url_con.disconnect();
        }
    }
    //System.out.println(responseContent);
    return responseContent;

}

%>

<% WeiXinHandler t=new WeiXinHandler(); t.valid(); %>

相關文章
相關標籤/搜索