微信开发之如何使用开发工具--weixin-java-tools
一、前沿
微信公众平台由于没有提供针对语言的开发包,只公布了一个基于Http协议的接口和加解密的算法sdk,这样给微信公众号的开发者带来很多工作量,除了实现业务逻辑外,还需要自己处理底层的接口协议细节,因此选择一个良好的sdk能够节省这样的工作量,而目前已经有不少的开源sdk可供使用,java语言的微信公众号sdk也有不少,那么作为java开发者我们应该如何选择呢?我将带着各位对java开源的一些微信公众号的sdk进行各方面的对比分析,为读者选择适合自己的sdk包提供一些帮助。
二、为什么要用weixin-java-tools
如下是官方给出的推荐。
-
不依赖任何mvc框架
-
也不依赖servlet,仅仅作为工具使用,可轻松嵌入到任何系统里(可能会有gson,httpclient的版本冲突问题,但是要比依赖spring mvc、struts、或者其他第三方框架好很多)
-
同时支持企业号和公众号
-
支持Session,实现了类似于HttpSession的WxSession。
二、几种常用的微信java sdk选型对比
1、初步选型
2、静态对比图
3、性能分析
这里我不多做介绍,已经有网友对此做了分析介绍,原文地址:http://my.oschina.net/ywbrj042/blog/402049?fromerr=NrYoMOTl
4、分析总结
经过静态分析对比、使用测试和性能测试综合分析,我认为在java平台中开发微信公众号服务端基于weixin-java-mp开源框架是最值得推荐的开源sdk.
它的优点有这些:
-
- 功能强大;包括公众号和企业号两个组件,公众号几乎所有的api都支持,若不知的还可以调用高级接口。
- 扩展性强;weixin-java-mp的代码结构设计合理,预留了较多扩展点,很容易自行扩展。
- 代码质量高;看了一些weixin-java-mp的代码,感觉该组件的质量非常高,设计精良,而且有大量的单元测试更加对该组件质量信心;
- 性能良好;上述测试结果表明该组件自身代码在多线程并发测试的场景下并未发现性能和质量问题;
- 通用性强;weixin-java-mp组件的第三方依赖较小,不依赖任何IOC、MVC容器,也不依赖于servlet,只是一个基础的微信api包装服务,可以在任何java项目中集成。
- 有非常详细的文档,见:https://github.com/chanjarster/weixin-java-tools/wiki
它的局限性有这些:
-
- 缺少与Servlet和Spring等同用框架的整合,给开发者增加了更高的学习和使用成本,应该基于weixin-java-mp开发一些快速上手的一些模块,以提高开发者使用效率;
对于大多数的场景我都推荐使用weixin-java-mp作为基础开发框架,它相对而言确实是一个更好的选择。
三、weixin-java-tools的使用介绍:
1、工具包下载: weixin-java-common 、weixin-java-mp
如果项目不是maven构建,请按照静态对比图,下载依赖jar包。
maven项目中只需要pom中添加如下依赖:
注:后续学习都是maven构建项目,如果不了解maven构建项目,请参考我的博文,谢谢~~
1 2 3 4 5 6 7 8 9 10 11 | <!-- 微信开发工具包 --> <dependency> <groupId>me.chanjar</groupId> <artifactId>weixin-java-mp</artifactId> <version> 1.3 . 3 </version> </dependency> <dependency> <groupId>me.chanjar</groupId> <artifactId>weixin-java-common</artifactId> <version> 1.3 . 3 </version> </dependency> |
2、使用weixin-java-tools接入微信开发者
使用到两个个比较重要的类 : weixin-java-mp工具包中的 WxMpService (一些API和封装的操作类)、WxMpInMemoryConfigStorage(微信配置参数实体类)
接入中使用到一个方法:WxMpService中的checkSignature方法,校验接入是否合法。
创建一个Servlet类,在get方法中 直接调用WxService.checkSignnature来校验接入是否合法 代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) * 用于接入 */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //微信服务器get传递的参数 String signature = request.getParameter( "signature" ); String timestamp = request.getParameter( "timestamp" ); String nonce = request.getParameter( "nonce" ); String echostr = request.getParameter( "echostr" ); //微信工具类 WxMpService wxService= new WxMpServiceImpl(); //注入token的配置参数 /** * 生产环境 建议将WxMpInMemoryConfigStorage持久化 */ WxMpInMemoryConfigStorage wxConfigProvider= new WxMpInMemoryConfigStorage(); //注入token值 wxConfigProvider.setToken( "weixin" ); wxService.setWxMpConfigStorage(wxConfigProvider); boolean flag=wxService.checkSignature(timestamp, nonce, signature); PrintWriter out=response.getWriter(); if (flag){ out.print(echostr); } out.close(); out= null ; } |
3、测试是否能够接入成功,欢迎各位再评论区评论,互相学习。