SSH框架构建微信公众帐号服务器小技巧

  熟悉struts2和servlet的同学应该清楚,struts2的方法多样性弥补了servlet单一的doGet 和doPost方法。如果自己的公众账号服务器是用servlet跟微信服务器交互,是用doGet方法完成与微信服务器的校验,用doPost方法接收用户发来的信息,经由微信服务器传递的HTTP POST请求。

  

例一:servlet中与微信服务器的校验和用户发送信息的处理

  java代码:

 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 微信加密签名
String signature = request.getParameter("signature"); // 时间戳
String timestamp = request.getParameter("timestamp"); // 随机数
String nonce = request.getParameter("nonce"); // 随机字符串
String echostr = request.getParameter("echostr"); PrintWriter out = response.getWriter(); // 请求校验,若校验成功则原样返回echostr,表示接入成功,否则接入 失败
if (SignUtil.checkSignature(signature, timestamp, nonce)) { out.print(echostr); } out.close();
out = null;
} /**
*doPost处理用户所发送到服务器的信息
*/
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 将请求、响应的编码均设置为UTF-8(防止中文乱码)
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8"); // 接收参数微信加密签名、 时间戳、随机数
String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
PrintWriter out = response.getWriter(); // 请求校验
if (SignUtil.checkSignature(signature, timestamp, nonce)) { // 调用核心服务类接收处理请求
String respXml = CoreService.processRequest(request);
out.print(respXml);
} out.close();
out = null;
}

但是如果是struts2交互问题就出来,因为你只能用 url:http://xxx.xxxx.com/xxx.do  和 token:xxx  注册微信公众平台

这样注册问题就出来了,你要同时响应get跟post请求。所以你需要对servlet的doGet和doPost方法进行整合,整合到action中的一个方法里。

  

 这样就有了如下代码:

 列2 :struts2中处理微信服务器校验 和用户发来消息处理

 java中struts2 action中代码:

 

 /**
  *action中的处理方法
  */
public String execute() throws Exception { // 将请求、响应的编码均设置为UTF-8(防止中文乱码)
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8"); // 接收参数微信加密签名、 时间戳、随机数
String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce"); // 随机字符串
String echostr = request.getParameter("echostr");
// System.out.println(signature+"...............................");
PrintWriter out = response.getWriter(); // 请求校验
23 if (SignUtil.checkSignature(signature, timestamp, nonce)) {
24 String method = ServletActionContext.getRequest().getMethod();
25
26 if (method.equals("POST")) {
27
28 // 调用核心服务类接收处理请求
29 String respXml = CoreService.processRequest(request);
30 out.print(respXml);
31
32 } else {
33
34 out.print(echostr);
35
36 }
37
38 } out.close();
out = null;
return null;
}

上述代码红色部分为核心核心部分,应该很好理解的;

关于上述两个类中的 SignUtil 工具类 没有提供代码,本帖只做如何与微信服务器交互的处理,也方便日后自己可以看看。

SSH框架构建微信公众帐号服务器小技巧的更多相关文章

  1. 微信公众帐号开发。大家是用框架还是自己写的流程。现在遇到若干问题。请教各路大仙 - V2EX

    微信公众帐号开发.大家是用框架还是自己写的流程.现在遇到若干问题.请教各路大仙 - V2EX 微信公众帐号开发.大家是用框架还是自己写的流程.现在遇到若干问题.请教各路大仙

  2. 【php学习之路】微信公众帐号

          上个月开始学习php,算上中间放假的时间差不多有一个月了.这段时间呢,每天上班没事的时候不慌不忙的看下php,刚开始也只是看下php中文手册,看完一遍好像没什么感觉.于是就想啊,做个什么东 ...

  3. 微信公众帐号开发教程第4篇-----开发模式启用及接口配置Java

    欢迎加入群:347245650   345531810 进行讨论相互交流  我的微信号:572839485 我的微信公众账号  我的微社区欢迎关注 索取源码←请点击 图床:没有服务器 拖拽图片 外网即 ...

  4. SQLSERVER走起微信公众帐号已经开通搜狗微信搜索

    SQLSERVER走起微信公众帐号已经开通搜狗微信搜索 请打开下面链接 http://weixin.sogou.com/gzh?openid=oIWsFt-hiIb_oYqQHaBMoNwRB2wM ...

  5. SQLSERVER走起微信公众帐号全新改版 全新首页

    SQLSERVER走起微信公众帐号全新改版 全新首页 今天,SQLSERVER走起微信公众帐号增加了首页功能 虽然还是订阅号,不过已经对版面做了比较大的修改,希望各位亲用得放心.用得安心O(∩_∩)O ...

  6. [039] 微信公众帐号开发教程第15篇-自定义菜单的view类型(访问网页)

    引言及内容概要 距离写上一篇文章<自定义菜单的创建及菜单事件响应>整整过了两个月的时间,那时公众平台还没有开放view类型的菜单.在不久前,微信公众平台悄悄开放了view类型的菜单,却没有 ...

  7. [034] 微信公众帐号开发教程第10篇-解析接口中的消息创建时间CreateTime(转)

    从微信公众平台的消息接口指南中能够看出,每种类型的消息定义中,都包括有CreateTime參数,它表示消息的创建时间,例如以下图所看到的: 上图是消息接口指南中4.1-文本消息的定义.注意Create ...

  8. [033] 微信公众帐号开发教程第9篇-QQ表情的发送与接收(转)

    我想大家对QQ表情一定不会陌生,一个个小头像极大丰富了聊天的乐趣,使得聊天不再是简单的文字叙述,还能够配上喜.怒.哀.乐等表达人物心情的小图片.本文重点要介绍的内容就是怎样在微信公众平台使用QQ表情, ...

  9. 欢迎大家关注我的微信公众帐号小q机器人(xiaoqrobot)(转)

    一个偶然的机会让我接触到了微信公众平台,赶紧加了几个交流群了解下相关情况,突然间发现好像全部的APP开发人员都在研究微信公众帐号的开发,而我显得有些落舞了.至于为什么热度会这么高,我想一个数字足以说明 ...

随机推荐

  1. php之XML转数组函数的方法

    <?/** * xml2array() will convert the given XML text to an array in the XML structure. * Link: htt ...

  2. Java 引用传递

    按照Java的规定,Java的函数参数在传递的时候有两种方式. 对于基本类型,如int,double等作为函数参数传递时,采取的是传值方式. 对于对象,如数组.字符串等作为参数传递时,采用的是引用方式 ...

  3. js中==, !==, === ,!=的区别

    在讨论比较符的时候我们先要来讨论哈js的类型,这样有助于我们从本质上了解原理. 下面是我找的资料加上个人的总结: js中有5种数据类型:Undefined.Null.Boolean.Number和St ...

  4. 图论$\cdot$强连通分量

    和无向图的连通分量类似,有向图有“强连通分量”的说法.“相互可达”的关系在有向图中也是等价关系.每一个集合称为有向图的一个强连通分量(scc).如果把一个集合看成一个点,那么所有的scc构成了一个sc ...

  5. 初学画布canvas的chapter1

    ——这篇读后感是我阅读<写给Web开发人员看的HTML5教程>一书中的第5章画布后的小小看法,由于编程实力有限,很多效果病没有一一去实现,所以只是停留在纸上谈兵的阶段. 画布(canvas ...

  6. python文件和目录操作方法大全(含实例)

    一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法.1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()2.返回指定目录下的所有文件和目 ...

  7. 手机号码归属地查询api接口

    淘宝网 API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443 参数: tel:手机号码 返回:JSON ...

  8. InfoSet

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  9. WCF 4.0 进阶系列 -- 随笔汇总

    WCF4.0 进阶系列–前言 WCF4.0 进阶系列--第一章 WCF简介 WCF4.0进阶系列--第二章 寄宿WCF服务 WCF4.0进阶系列--第三章 构建健壮的程序和服务 WCF4.0进阶系列- ...

  10. My97日期控件 选择日期区间

    <script language="javascript" type="text/javascript" src="My97DatePicker ...