一、前沿
微信公眾平台由於沒有提供針對語言的開發包,只公布了一個基於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構建項目,請參考我的博文,謝謝~~
<!-- 微信開發工具包 --> <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來校驗接入是否合法 代碼如下:
/** * @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、測試是否能夠接入成功,歡迎各位再評論區評論,互相學習。
PS:本節就給大家介紹到這里,后續我會持續使用weixin-java-tools來介紹一些微信開發,歡迎各位持續關注,謝謝~