你的位置:首页 > 软件开发 > Java > java开发微信公众平台(一)

java开发微信公众平台(一)

发布时间:2015-04-01 23:02:04
微信公众平台开发好像已经火了很长一段时间,我好像有点后知后觉。但只从了解它后便有点不可收拾之势,脑袋里总想着开发一个自己的公众号,虽然不知道具体做什么。  下面就说说自己这段时间对公众号的学习。  欲善其事,必先利其器。在开发之前先要申请一个公众号,公众号有三种,个人比较容易申请 ...

  微信公众平台开发好像已经火了很长一段时间,我好像有点后知后觉。但只从了解它后便有点不可收拾之势,脑袋里总想着开发一个自己的公众号,虽然不知道具体做什么。

  下面就说说自己这段时间对公众号的学习。

  欲善其事,必先利其器。在开发之前先要申请一个公众号,公众号有三种,个人比较容易申请的是订阅号,服务号还要审核,稍微麻烦一点,对于个人开发我建议申请服务号,

因为后面会做自定义菜单的功能。再就是我们需要有一个公网的服务器,这个可以申请sina的sae和百度的bae,个人比较喜欢sina的一点,比较容易上手。这里不讲公众号的申请

和sae服务器的申请和配置。

  再做完这两件事后我们就可以开始公众号的开发了。首先我们需要了解微信公众号的工作流程,对其有个整体的把握,要不今后就会换挺多简单错误。在启用开发者模式情况下

(下面内容都是在此模式下)当用户通过微信客服端发送消息到微信服务后,微信服务器会将此消息转发给我们的公网服务器,如上面所说sae和bae(以下内容也均是在sae下完成)

。具体的业务逻辑就在sae上完成,处理完后再将结果发回微信服务器,微信服务器再发给用户。

  申请到公众号后,登陆公众品台,可以看到微信已经帮我们准备好了许多功能,我们不需要编写任何代码就可以完成一个具有基本的公众号,但这不是本文的目的,我们是要

用自己的代码实现一些功能,因此我们要进入开发者中心去配置服务器接口

  下面就是本文核心内容:

  试想一下让两个完全不沾边的服务器(微信服务器和sae)对接的风险,因此必须有什么验证机制的存在。具体的验证过程是

1、微信服务器会以get方式调用我们部署在sae服务器上的servlet,并传signature、timestamp、nonce、echostr四个参数。其中signature是微信加密签名;timestamp

  是时间戳,防止即使有别有用心之人获得另外的参数而因时间戳的不一致无法完成验证;nonce是随机数;echostr是随机字符串,用于返回给微信服务器作比较。

2、servlet接收到以上数据后,会将token(在servlet中写好且要用公众平台上开发者中心的token相同)timestamp、nonce按字典方式排序,再拼接成字符串进行sha1加密

  将加密后的字符串与signature比较,如果相同就返回echostr。

3、微信服务器接收到返回的echostr,与发过去的echostr相比较,如果相同,就接入成功,否则失败。

java开发微信公众平台(一)java开发微信公众平台(一)
 1 /** 2  * 核心请求处理类  3  *  4 */ 5 public class CrazyServlet extends HttpServlet { 6  7   private static final long serialVersionUID = 5021188348833856475L; 8   @Override 9   protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {10     // 微信加密签名 11     String signature = request.getParameter("signature"); 12     // 时间戳 13     String timestamp = request.getParameter("timestamp"); 14     // 随机数 15     String nonce = request.getParameter("nonce"); 16     // 随机字符串 17     String echostr = request.getParameter("echostr"); 18     PrintWriter out = response.getWriter(); 19     // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败 20     if (SignUtil.checkSignature(signature, timestamp, nonce)) { 21         out.print(echostr); 22     } 23     out.close();24     out = null;25   }

原标题:java开发微信公众平台(一)

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。