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. *doPost处理用户所发送到服务器的信息
  29. */
  30. public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  31. // 将请求、响应的编码均设置为UTF-8(防止中文乱码)
  32. request.setCharacterEncoding("UTF-8");
  33. response.setCharacterEncoding("UTF-8");
  34.  
  35. // 接收参数微信加密签名、 时间戳、随机数
  36. String signature = request.getParameter("signature");
  37. String timestamp = request.getParameter("timestamp");
  38. String nonce = request.getParameter("nonce");
  39. PrintWriter out = response.getWriter();
  40.  
  41. // 请求校验
  42. if (SignUtil.checkSignature(signature, timestamp, nonce)) {
  43.  
  44. // 调用核心服务类接收处理请求
  45. String respXml = CoreService.processRequest(request);
  46. out.print(respXml);
  47. }
  48.  
  49. out.close();
  50. out = null;
  51. }

但是如果是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. 23 if (SignUtil.checkSignature(signature, timestamp, nonce)) {
  24. 24 String method = ServletActionContext.getRequest().getMethod();
  25. 25
  26. 26 if (method.equals("POST")) {
  27. 27
  28. 28 // 调用核心服务类接收处理请求
  29. 29 String respXml = CoreService.processRequest(request);
  30. 30 out.print(respXml);
  31. 31
  32. 32 } else {
  33. 33
  34. 34 out.print(echostr);
  35. 35
  36. 36 }
  37. 37
  38. 38 }
  39.  
  40. out.close();
  41. out = null;
  42. return null;
  43. }

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

关于上述两个类中的 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. 解决jQuery ajax跨域问题,Google、IE、Firefox亲测有效

    直接上最后的结果吧 JS: $.ajax({ type: "GET", async: false, crossDomain: true, url: "www.test.c ...

  2. CI框架多个表前缀,如何使用框架语句querybuilder

    最近用CI框架遇到一个问题.2个前提条件: 1.数据库设计不规范,有的有表前缀(如:ck_table1),有的没有(如:table2)或者表前缀不一样: 2.数据库操作又想使用数据库操作语句query ...

  3. [课程设计]Scrum 1.5 多鱼点餐系统开发进度(点餐页面框架修复及继续布置)

    Scrum 1.5 多鱼点餐系统开发进度(点餐页面框架修复及继续布置)  1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅 ...

  4. Android 获取全部应用

      package com.lvshandian.menshen.download;import android.content.Context;import android.content.Inte ...

  5. [问题2014A04] 复旦高等代数 I(14级)每周一题(第六教学周)

    [问题2014A04]  设 \(A,B,C,D\) 均为 \(n\) 阶方阵. (1) 若 \(A^2=A\), \(B^2=B\), \((A+B)^2=A+B\), 证明: \(AB=BA=0\ ...

  6. Cheatsheet: 2015 11.01 ~ 11.30

    Golang Roadomatic: Node vs. Go Quick Guide to Golang for Java Developers 3 Go Gotchas Web Choosing a ...

  7. End Routine

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

  8. JavaScript 获取当前时间戳

    转自博客(http://blog.sina.com.cn/s/blog_8772845101019kg5.html) JavaScript 获取当前时间戳:第一种方法: var timestamp = ...

  9. linux SVNUP显示无法连接主机

    今天开发环境中突然无法连接主机了,我就想到 1.更改svn 链接地址,发现不可取,工程中的每个目录下面都有个.svn文件,修改起来麻烦: 2.建立新文件夹,重新checkout,发现还是无法链接 最后 ...

  10. __VA_ARGS__可变参数宏

    #define qWiFiDebug(format, ...) qDebug("[WiFi] "format" File:%s, Line:%d, Function:%s ...