java微信開發(wechat4j)——支持微信JS-SDK的jsapi_ticket中控服務器


jsapi_ticket是使用js-sdk必須要的一個憑證,需要配置在js中。

jsapi_ticket獲取

要獲取jsapi_ticket可以使用如下的方法

String jsapi_ticket = TokenProxy.jsApiTicket();

jsapi_ticket中控服務器

jsapi_ticket每日有一個次數限制,所以客戶服務器不能每次是都去請求一個新的jsapi_ticket,每次請求之后,jsapi_ticket都有一個過期時間。因此微信平台建議你使用一個中控服務器來定時刷新jsapi_ticket,取得之后存起來不用再去請求jsapi_ticket,因為jsapi_ticket請求有次數限制。 這樣處理只有有兩個好處:

  1. 保證jsapi_ticket每日都不會超出訪問限制,保證服務的正常。
  2. 提高服務的性能,不用每次發送業務請求之前都先發送一次jsapi_ticket獲取請求。

wechat4j獲取jsapi_ticket是通過jsapi_ticket的代理TokenProxy來獲取,而此代理封裝了jsapi_ticket的中控服務器。對jsapi_ticket的保存有兩種方式,一種是內存保存,一種是持久化保存(數據庫或者文件)。內存保存方式的中控服務器由wehcat4j實現,客戶不做任何操作。如果客戶要使用持久化保存,那么就需要自己去定義中控服務器。所以有如下兩種中控服務器:

  • jsapi_ticket默認中控服務器
  • jsapi_ticket自定義中控服務器

默認中控服務器

wechat4j的默認中控服務器是內存模式,即將jsapi_ticket保存在內存中,直到過期的時候再去請求一個新的來替代。默認中控服務器對應的類是JsApiTicketMemServer。

  • 優點:此模式的中控服務器有點是效率高,使用方便,客戶不用關心。
  • 缺點:無法支持多服務器的集群,如果多個服務器的時候,此方式將不被支持。

自定義中控服務器

如果你需要將jsapi_ticket保存在數據庫或者文件中,那么就需要使用自定義的中控服務器。自定義的服務器需要客戶自己完成,必須繼承抽象類CustomerServer,完成其中的保存和查詢方法即可,同時自定義的服務器是由定時器來驅動操作的,需要配置監聽器。
配置自定義jsapi_ticket服務器的詳細步驟:

  • 創建自己的服務器類,需要繼承wechat4j的CustomerServer類,實現save和find方法,前者是將jsapi_ticket保存到數據庫的操作,后者是從數據庫中查詢jsapi_ticket的方法,里面可以是一個sql操作之類的。
public class CustomerJsApiTicketServer extends CustomerServer{

	/* (non-Javadoc)
	 * @see org.sword.wechat4j.token.DbAccessTokenServer#find()
	 */
	@Override
	public String find() {
		String accessToken = null;
		//執行數據庫操作
//		String sql = "select cfgValue from cfg where cfg.cfgKey = 'jsapi_ticket'";
//		accessToken = DBUtil.query(sql);
		return accessToken;
	}

	/* (non-Javadoc)
	 * @see org.sword.wechat4j.token.DbAccessTokenServer#save()
	 */
	@Override
	public boolean save(Token jsapiTicket) {
		//如果沒有需要插入,如果有的就更新,假設已經有了數據庫配置項
//		String sql = "update cfg set cfg.cfgValue=" + jsapiTicket.getToken() + 
//				" where cfg.cfgKey= 'jsapi_ticket'";
//		DBUtil.execute(sql);
		return true;
	}
}
  • 在wechat4j.properties配置文件中配置wechat.ticket.jsapi.server.class項,配上剛才新建的服務器類的路徑,示例如下:
 wechat.ticket.jsapi.server.class=com.sample.wechat.CustomerJsApiTicketServer 
  • 在web.xml中配置wechat4j的監聽器。代碼如下:
  	<listener>
		<listener-class>org.sword.wechat4j.token.TokenListener</listener-class>
	</listener>

通過如上三步就能配置好自己的數據庫jsapi_ticket服務器。這樣由中控服務器定時去刷新jsapi_ticket,然后保存到數據庫中,業務邏輯中要使用jsapi_ticket的時候,是通過代理去數據庫拿到數據。
定時刷新任務會提前200秒運行,防止到有效期之后運行過程中新jsapi_ticket沒有取得舊的jsapi_ticket過期的情況發生。

wechat4j框架官方文檔: https://github.com/sword-org/wechat4j/wiki
wechat4j技術交流QQ群: 423134346


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM