%@ 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"% %@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%
<%
//WeiXinHandler为内部类不能使用非final类型的对象 final String TOKEN=“daniuco”;//此处填写自己的TOKEN参数,见开发模式
final HttpServletRequest final_request=request;
final HttpServletResponse final_response=response;
%> <%
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; } 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”); String textTpl = “ “+ “ %1$s “+ “ %2$s “+ “ %3$s “+ “ %4$s “+ “ %5$s “+ “ 0 “+ “ “; String htmlTpl = “ “+ “ %1$s “+ “ %2$s “+ “ %3$s “+ “ %4$s ” + "[%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();
%>

纯JSP实现简单微信开发后台的更多相关文章

  1. 纯JSP实现简单登录跳转

    1.JSP介绍 JSP即Java Server Pages,JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑.网页还能通过tags和script ...

  2. 基于Django进行简单的微信开发

    代码地址如下:http://www.demodashi.com/demo/11756.html 一.微信公众号的准备: 1. 注册 访问地址:https://mp.weixin.qq.com/ 按照提 ...

  3. 【微信开发】公众号后台设置错误导致的微信redirect_uri参数错误【图】

    在微信开发中,如微信网页授权登录,分享到朋友圈自定义内容,微信h5支付时 可能会遇到微信redirect_uri参数错误的情况. 此时除了检查自己代码正确性外,还要检查一下是否正确地设置了公众号后台的 ...

  4. jsp简单标签开发(一)

    孤傲苍狼 @Override22 public void doTag() throws JspException, IOException {23 //得到代表jsp标签体的JspFragment24 ...

  5. javaweb学习总结(二十五)——jsp简单标签开发(一)

    一.简单标签(SimpleTag) 由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单.便于编 ...

  6. jsp 简单标签开发

    实现simpleTag接口的标签通常称为是简单标签,简单标签一共定义了5个方法 setJspContext方法 setParent方法 getParent方法 setJspBody方法 doTag方法 ...

  7. 微信开发系列----02:实现POST请求响应

    继续昨天的,现在我们的微信测试成功了,可以开发实现微信的各种功能,今天主要实现微信的简单交互,比如发送语音,图片,文本等请求,网站服务器发送对应的响应. 项目GitHub地址:  https://gi ...

  8. C#微信开发之旅--自定义菜单

    上一篇说道基本信息的回复<C#微信开发之旅--基本信息的回复>,当中就说到文本信息的回复,其他信息的回复,可以参考下开发文档中回复信息的格式进行修改就可以. 下面来实现下自定义菜单.据我了 ...

  9. Java企业微信开发_09_身份验证之移动端网页授权(有完整项目源码)

    注: 源码已上传github: https://github.com/shirayner/WeiXin_QiYe_Demo 一.本节要点 1.1 授权回调域(可信域名) 在开始使用网页授权之前,需要先 ...

随机推荐

  1. 乐字节Java8核心特性之方法引用

    大家好,我是乐字节的小乐,上一次我们说到了Java8核心特性之函数式接口,接下来我们继续了解Java8又一核心特性--方法引用. Java8 中引入方法引用新特性,用于简化应用对象方法的调用, 方法引 ...

  2. 分享几篇有关react-native的博客

    http://segmentfault.com/a/1190000002646155 http://facebook.github.io/react-native/docs/native-module ...

  3. Manacher HDOJ 3068 最长回文

    题目传送门 关于求解最长回文子串,有dp做法,也有同样n^2的但只用O(1)的空间,还有KMP,后缀数组?? int main(void) { ) == ) { ); memset (dp, fals ...

  4. python如何添加浏览器驱动路径

    闲来无事,整一整python+selenium,写完代码后运行发现找不到webdriver的路径:之前是仿照java一样直接把webdriver放到浏览器的安装目录下 迫于无奈,只好查一下问题如何处理 ...

  5. 修改 进程占用资源限制ulimit(限制服务器的链接数目)

    ulimit用于限制shell启动进程所占用的资源.其中ulimit -n用于限制进程能够打开的文件描述符的最大数目.因为任何设备在linux下都是文件,通信的接口也有专门的接口文件负责,所以linu ...

  6. WEB-CSS实现单行(多行)文本溢出显示省略号

    //单行文本溢出部分隐藏显示省略号...overflow: hidden; text-overflow:ellipsis; white-space: nowrap; /** n 行文本溢出部分隐藏显示 ...

  7. overflow实现隐藏滚动条同时又可以滚动

    .scroll-list ul{ white-space: nowrap; -webkit-overflow-scrolling: touch; overflow-x: auto; overflow- ...

  8. JS高级——文件操作

    https://www.cnblogs.com/mingmingruyuedlut/archive/2011/10/12/2208589.html https://blog.csdn.net/pl16 ...

  9. POJ_3278_Catch That Cow

    Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 54911   Accepted: 17176 ...

  10. Vue.js 是什么

    Vue.js 是什么 Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.Vue 采用自底向上增量开发的设计. Vue 的核心库只关注视图层. 单页应用:Vue ...