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

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

  

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

  java代码:

 1 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 2      // 微信加密签名
 3       String signature = request.getParameter("signature");
 4
 5      // 时间戳
 6      String timestamp = request.getParameter("timestamp");
 7
 8      // 随机数
 9      String nonce = request.getParameter("nonce");
10
11      // 随机字符串
12      String echostr = request.getParameter("echostr");
13
14      PrintWriter out = response.getWriter();
15
16      // 请求校验,若校验成功则原样返回echostr,表示接入成功,否则接入        失败
17      if (SignUtil.checkSignature(signature, timestamp, nonce)) {
18
19          out.print(echostr);
20
21       }
22
23      out.close();
24      out = null;
25  }
26
27
28
29
30  /**
31  *doPost处理用户所发送到服务器的信息
32  */
33  public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
34          // 将请求、响应的编码均设置为UTF-8(防止中文乱码)
35          request.setCharacterEncoding("UTF-8");
36          response.setCharacterEncoding("UTF-8");
37
38          // 接收参数微信加密签名、 时间戳、随机数
39          String signature = request.getParameter("signature");
40          String timestamp = request.getParameter("timestamp");
41          String nonce = request.getParameter("nonce");
42          PrintWriter out = response.getWriter();
43
44          // 请求校验
45         if (SignUtil.checkSignature(signature, timestamp, nonce)) {
46
47              // 调用核心服务类接收处理请求
48              String respXml = CoreService.processRequest(request);
49              out.print(respXml);
50      }
51
52          out.close();
53          out = null;
54  }    

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

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

  

 这样就有了如下代码:

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

 java中struts2 action中代码:

 

 1 /**
 2   *action中的处理方法
 3   */
 4    public String execute() throws Exception {
 5
 6         // 将请求、响应的编码均设置为UTF-8(防止中文乱码)
 7         HttpServletRequest request =             ServletActionContext.getRequest();
 8        HttpServletResponse response = ServletActionContext.getResponse();
 9        request.setCharacterEncoding("UTF-8");
10        response.setCharacterEncoding("UTF-8");
11
12        // 接收参数微信加密签名、 时间戳、随机数
13        String signature = request.getParameter("signature");
14        String timestamp = request.getParameter("timestamp");
15        String nonce = request.getParameter("nonce");
16
17        // 随机字符串
18        String echostr = request.getParameter("echostr");
19        // System.out.println(signature+"...............................");
20        PrintWriter out = response.getWriter();
21
22        // 请求校验
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        }
39
40        out.close();
41        out = null;
42        return null;
43      }

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

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

时间: 2024-10-02 18:32:19

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

[028] 微信公众帐号开发教程第4篇-消息及消息处理工具的封装

工欲善其事必先利其器!本篇内容主要讲解如何将微信公众平台定义的消息及消息相关的操作封装成工具类,方面后期的使用.这里需要明确的是消息其实是由用户发给你的公众帐号的,消息先被微信平台接收到,然后微信平台会将该消息转给你在开发模式接口配置中指定的URL地址. 微信公众平台消息接口 要接收微信平台发送的消息,我们需要先熟悉微信公众平台API中消息接口部分,点此进入,点击后将进入到消息接口指南部分,如下图所示: 在上图左侧可以看到微信公众平台目前开放的接口有三种:消息接口.通用接口和自定义菜单接口.通用

微信公众帐号开发之一(java)

闲来没事,就记录一下微信公众平台的开发吧~ 其实微信公众平台开发没有想象中的那么困难,因为注册了微信公众平台帐号登录之后在开发者模式里有详细的文档,个人感觉介绍还是比较详细的. 微信公众平台订阅号和服务号的区别网上已经有N多的介绍了,这里就不再说了.从微信公众平台登录之后开始说起吧. 对于开发者来说,开发者模式是最好的选择了.因为在里面可以更自由更灵活的选择消息回复方式.编辑模式只能对特定的字符进行相应的消息回复.而且在开发者模式下可以灵活的创建自定义菜单(前提是你的帐号有提供相应的接口,需要微

学习node js 之微信公众帐号接口开发 准备工作

绪:因工作需要,最近开始学习Node js,之前隐隐约约听到过node js 但没有实际见到过,只好google了:至于什么是node js,能做些什么,有多么好,或者有哪些弊端我这里就不多说了,因为我也说不来. 注:因工作系统平台是windows环境,所以这一系列开发测试都以windows系统.(win7)系统: 一.准备工作: node js 安装 1. 进入node js官网,选择INSERTALL 会下载 xxxxx 86.msi 版本的:这个版本会把node js 和npm都安装好:

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

编辑模式与开发模式 微信公众帐号申请成功后,要想接收处理用户的请求,就必须要在"高级功能"里进行配置,点击"高级功能",将看到如下界面: 从上图中可以看到,高级功能包含两种模式:编辑模式和开发模式,并且这两种模式是互斥关系,即两种模式不能同时开启.那两种模式有什么区别呢?作为开发人员到底要开启哪一种呢?编辑模式:主要针对非编程人员及信息发布类公众帐号使用.开启该模式后,可以方便地通过界面配置"自定义菜单"和"自动回复的消息".

[029] 微信公众帐号开发教程第5篇-各种消息的接收与响应

前一篇文章里我们已经把微信公众平台接口中消息及相关操作都进行了封装,本章节将主要介绍如何接收微信服务器发送的消息并做出响应. 明确在哪接收消息 从微信公众平台接口消息指南中可以了解到,当用户向公众帐号发消息时,微信服务器会将消息通过POST方式提交给我们在接口配置信息中填写的URL,而我们就需要在URL所指向的请求处理类CoreServlet的doPost方法中接收消息.处理消息和响应消息.   接收.处理.响应消息 下面先来看我已经写好的CoreServlet的完整代码: [java] vie

微信公众帐号应用开发—本地调试

微信开发-本地调试 做微信开发有个比较麻烦的事情,就是如何调试的问题.因为微信开发,服务端必须要部署在公网部署上才能与微信进行联通,而且端口必须为80,否则不能与微信账户进行联调.所以,如果每次开发完一个功能都部署到公网server上才能测试,那估计非常痛苦了. 做微信公众帐号开发,其实跟传统开发没什么太大区别,只是在这个开发过程必须要调用微信的API接口,所以必须遵循微信API的标准才行. 微信服务器在我们开发微信公众帐号相关功能需求中承担一个中介的角色,也就是说,我们的微信公众帐号与用户的微

[038] 微信公众帐号开发教程第14篇-自定义菜单的创建及菜单事件响应

微信5.0发布 2013年8月5日,伴随着微信5.0 iPhone版的发布,公众平台也进行了重要的更新,主要包括: 1)运营主体为组织,可选择成为服务号或者订阅号: 2)服务号可以申请自定义菜单: 3)使用QQ登录的公众号,可以升级为邮箱登录: 4)使用邮箱登录的公众号,可以修改登录邮箱: 5)编辑图文消息可选填作者: 6)群发消息可以同步到腾讯微博. 其中,大家议论最多的当属前两条,就是关于帐号类型和自定义菜单的更新,我这里做几点补充说明: 1)目前公众号类型分为两种:服务号和订阅号,8月5日

[037] 微信公众帐号开发教程第13篇-图文消息全攻略

引言及内容概要 已经有几位读者抱怨“柳峰只用到文本消息作为示例,从来不提图文消息,都不知道图文消息该如何使用”,好吧,我错了,原本以为把基础API封装完.框架搭建好,再给出一个文本消息的使用示例,大家就能够照猫画虎的,或许是因为我的绘画功底太差,画出的那只猫本来就不像猫吧…… 本篇主要介绍微信公众帐号开发中图文消息的使用,以及图文消息的几种表现形式.标题取名为“图文消息全攻略”,这绝对不是标题党,是想借此机会把大家对图文消息相关的问题.疑虑.障碍全部清除掉. 图文消息的主要参数说明 通过微信官方

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

SQLSERVER走起微信公众帐号已经开通搜狗微信搜索 请打开下面链接 http://weixin.sogou.com/gzh?openid=oIWsFt-hiIb_oYqQHaBMoNwRB2wM 可以查找所有历史文章,也可以关注本公众帐号,在电脑浏览器上看更方便! 可以看到最近推送的文章一目了然 妈妈再也不用担心我找不到历史文章了o(∩_∩)o  关注我