首頁 >Java >java教程 >java微信開發(wechat4j)-access_token中控伺服器實現

java微信開發(wechat4j)-access_token中控伺服器實現

高洛峰
高洛峰原創
2017-02-13 16:03:432386瀏覽

access_token是與微信伺服器互動過程中的憑證,每次客戶伺服器主動與微信伺服器通訊都需要帶上access_token以確認自己的身分。 wechat4j內部封裝了access_token的操作,包括取得access_token和access_token中控伺服器的實作。

access_token取得

要取得access_token可以使用以下的方法

String accessToken = TokenProxy.accessToken();

,所以客戶嘗試一個次數中一個控制次數所執行長都去請求一個新的access_token,每次請求之後,access_token都有一個過期時間。因此微信平台建議你使用一個中控伺服器來定時刷新token,取得之後存起來不用再去請求token,因為access_token請求有次數限制。 這樣處理只有有兩個好處:

保證access_token每日都不會超出存取限制,保證服務的正常。

提高服務的效能,不用每次發送業務請求之前都先發送一次access_token獲取請求。

wechat4j獲取access_token是透過access_token的代理TokenProxy來獲取,而此代理程式封裝了access_token的中控伺服器。 access_token的保存有兩種方式,一種是記憶體保存,一種是持久化保存(資料庫或檔案)。記憶體保存方式的中控伺服器由wehcat4j實現,客戶不做任何操作。如果客戶要使用持久化保存,那麼就需要自己定義中控伺服器。所以有以下兩種中控伺服器:

access_token預設中控伺服器

access_token自訂中控伺服器

預設中控伺服器

wechat4j的預設中控伺服器是記憶體模式,即將access_token過期的時候再去請求一個新的來替代。預設中控伺服器對應的類別是AccessTokenMemServer。

優點:此模式的中控伺服器有點是效率高,使用方便,客戶不用關心。

缺點:無法支援多伺服器的集群,如果多個伺服器的時候,此方式將不被支援。

自訂中控伺服器

如果你需要將access_token保存在資料庫或檔案中,那麼就需要使用自訂的中控伺服器。自訂的伺服器需要客戶自己完成,必須繼承抽象類別CustomerServer,完成其中的保存和查詢方法即可,同時自訂的伺服器是由計時器來驅動操作的,需要配置監聽器。

設定自訂access_token伺服器的詳細步驟:

建立自己的伺服器類,需要繼承wechat4j的CustomerServer類,實作save和find方法,前者是將access_token儲存到資料庫的操作,後者是從資料庫中查詢access_token的方法,裡面可以是一個sql操作之類的。

public class CustomerAccessTokenServer extends CustomerServer{/* (non-Javadoc) * @see org.sword.wechat4j.token.DbAccessTokenServer#find() */@Overridepublic String find() {
    String accessToken = null;    //执行数据库操作//      String sql = "select cfgValue from cfg where cfg.cfgKey = 'access_token'";//      accessToken = DBUtil.query(sql);
    return accessToken;
}/* (non-Javadoc) * @see org.sword.wechat4j.token.DbAccessTokenServer#save() */@Overridepublic boolean save(Token accessToken) {    //如果没有需要插入,如果有的就更新,假设已经有了数据库配置项//      String sql = "update cfg set cfg.cfgValue=" + accessToken.getToken() + //              " where cfg.cfgKey= 'access_token'";//      DBUtil.execute(sql);
    return true;
}
}

在wechat4j.properties設定檔中設定wechat.accessToken.server.class項,搭配剛才新建的伺服器類別的路

 wechat.accessToken.server.class=com.sample.wechat.CustomerAccessTokenServer

在web.xml中設定wechat4j的access_token監聽器。程式碼如下:

<listener>
    <listener-class>org.sword.wechat4j.token.TokenListener</listener-class></listener>

透過如上三步驟就能設定好自己的資料庫access_token伺服器。這樣由中控伺服器定時去刷新access_token,然後儲存到資料庫中,業務邏輯中要使用access_token的時候,是透過代理去資料庫拿到資料。

定時刷新任務會提前200秒運行,防止到有效期之後運行過程中新access_token沒有取得舊的access_token過期的情況發生。

更多java微信開發(wechat4j)-access_token中控伺服器實作相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn