Access_token は、WeChat サーバーとの対話中の認証情報です。クライアント サーバーが WeChat サーバーと積極的に通信するたびに、その身元を確認するために access_token を取得する必要があります。 Wechat4j は、access_token の取得と access_token 中央制御サーバーの実装を含む、access_token の操作を内部的にカプセル化します。
access_token取得
access_tokenを取得するには、以下のメソッドを使用できます
String accessToken = TokenProxy.accessToken();
access_token集中管理サーバー
access_tokenには1日あたりの制限があるため、クライアントサーバーは使用できませんすべてのリクエストが新しい access_token をリクエストするたびに、access_token には有効期限があります。したがって、WeChat プラットフォームでは、access_token リクエストの数が制限されているため、トークンを取得した後、再度トークンをリクエストすることなく保存できるように、中央制御サーバーを使用して定期的にトークンを更新することをお勧めします。 これを行うことの利点は 2 つだけです:
access_token が毎日アクセス制限を超えないようにして、通常のサービスを保証します。
サービスのパフォーマンスが向上し、各ビジネスリクエストが送信される前にaccess_token取得リクエストを送信する必要がなくなりました。
wechat4j は、access_token のプロキシ TokenProxy を通じて access_token を取得し、このプロキシは access_token の中央制御サーバーをカプセル化します。 access_token を保存するには 2 つの方法があり、1 つはメモリに保存する方法、もう 1 つは永続的に保存する方法 (データベースまたはファイル) です。メモリストレージ方式の集中管理サーバーはwehcat4jにより実装されており、お客様による操作は不要です。顧客が永続ストレージを使用したい場合は、中央制御サーバーを自分で定義する必要があります。したがって、次の 2 つの中央制御サーバーがあります:
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>
上記の 3 つの手順を通じて、独自のデータベース access_token サーバーを構成できます。このように、中央制御サーバーは access_token を定期的に更新し、access_token がビジネス ロジックで使用されるときに、プロキシを通じてデータベースからデータを取得します。
スケジュールされた更新タスクは、古い access_token の有効期限後に新しい access_token が期限切れになるのを防ぐために、200 秒前に実行されます。
Java WeChat 開発 (wechat4j) - access_token 中央制御サーバーの実装に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。