jwxJava 微信公眾號 MVC 開發(fā)框架
jwx是開源的java公眾號開發(fā)MVC框架,基于spring配置文件和微信消息或事件注解,通過微信上下文處理一個或多個微信公眾號服務請求。 目的主要有兩個,其一生封裝微信請求xml消息為java實體對象,將返回對象轉換為xml響應消息;其二是封裝微信接口為java服務。微信公眾號采用 web服務作為消息與第三方平臺發(fā)生交互,數據格式主要是xml和json,普通的web請求響應機制采用xml數據格式交互,微信接口服務采用json 數據格式。jwx主要對這兩個方面做了封裝處理,另外借鑒springmvc的請求處理方式,以WeixinDispatcherServlet類作為消 息分發(fā)控制器,通過消息組裝工廠生成請求消息或事件實體,根據消息或事件類型,在消息策略處理工廠查找處理策略,獲取相應的微信處理方法,Servlet 獲取到處理方法后,請求線程池獲取線程調用微信方法,根據微信方法的返回值,生成請求的xml響應。本說明文檔將分章節(jié)說明jwx框架的特征、快速入門、 配置、擴展等各個方面。
一、特征
消息重排自動處理,提供消息重排緩存接口
明文/加密模式無感知切換
常用的微信接口服務封裝
提供線程池執(zhí)行微信方法,方法調用線程池大小可配置
長任務消息推送
通過微信上下文配置支持多個微信公眾號處理
提供統一的異常處理機制
提供access_token自動更新機制
請求消息組裝
靈活的響應消息類型
二、快速入門
本章教材提供一個最簡單的例子,用戶在微信公眾號發(fā)一條foo的文本請求消息,公眾號響應一條bar的文本響應消息。
1、maven配置文件
通過maven生成一個webapp項目,例如項目名為weixin,在maven配置文件pom.xml中添加jwx依賴,jwx的1.0.0jar包已經提交到maven中心倉庫,通過中心倉庫搜索jwx關鍵字可以獲取jar包依賴配置。
<dependency> <groupId>com.github.jweixin</groupId> <artifactId>jwx</artifactId> <version>1.0.0</version> </dependency>
2、web.xml文件配置
web.xml是web應用的配置文件,jwx從spring配置文件中獲取配置信息,所以必須配置spring上下文環(huán)境;另外,需要配置微信消 息處理分發(fā)Servlet(WeixinDispatcherServlet),用于處理微信送過來的請求消息或事件。jwx對springmvc沒有依 賴關系,web mvc框架可以根據實際需要配置。
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>weixin</servlet-name> <servlet-class>com.github.jweixin.jwx.servlet.WeixinDispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>weixin</servlet-name> <url-pattern>/wx/*</url-pattern> </servlet-mapping>
load-on-startup表示Servlet在web應用啟動階段加載,數字代表了啟動次序,如果項目使用了springmvc框架,可以調整該數字為2,放到springmvc框架后面啟動加載,但實際上Servlet的啟動次序并沒有太大的關系。
spring配置是jwx必須的,如果沒有配置spring上下文,jwx在啟動階段會報錯。
url-pattern模式匹配微信公眾號平臺服務器配置的URL配置,如果需要處理多個微信公眾號,可以配置多個servlet-mapping或者使用路徑通配符匹配多個url鏈接。
3、spring配置文件
spring配置文件applicationContext.xml里面需要配置WeixinConfigurer,這是jwx唯一必須配置項,如果沒有配置,啟動階段會報錯。
<context:component-scan base-package="com.github.jweixin.jwx.weixin.service" /> <bean class="com.github.jweixin.jwx.config.WeixinConfigurer"> <property name="packages"> <list> <value>com.telecomjs.yc.controller</value> </list> </property> </bean>
component-scan配置了微信接口服務類,里面包含常用的微信公眾號接口服務,例如菜單管理、消息服務、二維碼服務、用戶管理、微信網 頁授權、素材管理等服務內容,在web應用控制器類和微信控制器類里面可以通過@Autowired注解來注入服務。本配置并不是必須項。
WeixinConfigurer是唯一需要配置的部分,packages屬性必須配置,里面是微信控制器包路徑列 表,WeixinDispatcherServlet在啟動階段會掃描包路徑及其下面的子包路徑,如果類擁有@Weixin注解,則該類會被當作微信控制 器類加載到微信上下文。
除了packages屬性是必須配置的,其他配置都有缺省值,包括消息緩存、微信方法線程池的大小、微信方法調用超時閥值等,這部分內容放在配置部分說明了。
4、編寫微信控制器類
當配置完上面的3個部分,所有的配置文件就結束了,是不是很簡單呢。下面我們只需要寫微信控制器類就能讓我們的微信公眾號活起來了。微信控制器類是 用@Weixin注解的普通類,與sprngmvc里面的controller很類似,方法的執(zhí)行也很類似。我們在 com.telecomjs.yc.controller包下建一個java類WeixinController,如下:
package com.telecomjs.yc.controller;
import com.github.jweixin.jwx.context.Weixin;
import com.github.jweixin.jwx.message.annotation.TextMsg;
@Weixin(value="/wx/coreServlet",
appID="xxx",
appSecret="xxx",
encodingAESKey="xxx",
token="xxx")
public class WeixinController {
@TextMsg("foo")
public String foo(){
return "bar";
}
}
@Weixin需要配置value值,這個實際就是微信服務器配置里面URL最后的部分,當然不包含域名和web應用的上下文,切記,不能包含web應用上下文,其他4個部分配置內容也是公眾號配置內容,我們只需要登錄到公眾號看下填進去就行了。如果沒有配置encodingAESKey,那么是不能處理加密消息的,如果有l(wèi)og4j的配置文件,啟動階段會給出告警信息的。
同一個公眾號可以配置多個@Weixin注解控制器類,其中只需要一個有其他4項配置就可以了,如果多個控制器類配置了其他4個配置項,如果相對應的配置項值不相同,啟動階段會報錯。
不同微信公眾號是通過@Weixin的value值區(qū)分的,該值同時是微信上下文的查找關鍵字。
foo方法上面有@TextMsg注解,是定義的微信方法,在Servlet啟動時通過包掃描加載到微信上下文對象中。jwx針對微信消息或事件類型設計了一組微信注解,基本涵蓋了微信公眾號定義的消息和事件類型。
@TextMsg是文本消息注解,代表請求類型的是文本消息,value值是發(fā)送的文本消息內容。處理文本適配模式,@TextMsg還支持正則表達式適配模式,這部分內容在配置部分說明。
本例中微信方法并沒有設置參數,實際可以靈活設置參數,例如我們可以在方法中設置HttpServletRequest request,HttpServletResponse response,InMessage in, WeixinContext context等參數,這部分內容也放在配置部分說明。
-
本例中方法的返回類型是String,代表響應的消息內容是文本消息,jwx提供了豐富的返回值類型,這部分內容會在配置部分詳細說明。
5、啟動web應用
上面就是這個最簡單例子的全部內容,讓我們啟動web應用,進入到我們的公眾號,輸入foo文本提交,看看返回的是不是bar這個內容了,如果是,恭喜你,你已經初步掌握了jwx的使用方法。下面更多的內容等著你呢!
