微信客户端配置信息存储解决方案

  • WxMpConfigStorage接口提供了一下参数获取的get-interface:
    
  •  对应的变量在使用时要注意并发处理,这部分后面补充

  protected volatile String appId;
  protected volatile String secret;
  protected volatile String token;
  protected volatile String templateId;
  protected volatile String accessToken;
  protected volatile String aesKey;
  protected volatile long expiresTime;
  protected volatile String oauth2redirectUri;

  protected volatile String httpProxyHost;
  protected volatile int httpProxyPort;
  protected volatile String httpProxyUsername;
  protected volatile String httpProxyPassword;

  protected volatile String jsapiTicket;
  protected volatile long jsapiTicketExpiresTime;

  protected volatile String sdkTicket;
  protected volatile long sdkTicketExpiresTime;

  protected volatile String cardApiTicket;
  protected volatile long cardApiTicketExpiresTime;

 

/**
 * 微信客户端配置存储.
 *
 */
public interface WxMpConfigStorage {

  String getAccessToken();

  Lock getAccessTokenLock();

  boolean isAccessTokenExpired();

  /**
   * 强制将access token过期掉.
   */
  void expireAccessToken();

  /**
   * 应该是线程安全的.
   *
   * @param accessToken 要更新的WxAccessToken对象
   */
  void updateAccessToken(WxAccessToken accessToken);

  /**
   * 应该是线程安全的.
   *
   * @param accessToken      新的accessToken值
   * @param expiresInSeconds 过期时间,以秒为单位
   */
  void updateAccessToken(String accessToken, int expiresInSeconds);

  String getTicket(TicketType type);

  Lock getTicketLock(TicketType type);

  boolean isTicketExpired(TicketType type);

  /**
   * 强制将ticket过期掉.
   */
  void expireTicket(TicketType type);

  /**
   * 更新ticket.
   * 应该是线程安全的
   *
   * @param type             ticket类型
   * @param ticket           新的ticket值
   * @param expiresInSeconds 过期时间,以秒为单位
   */
  void updateTicket(TicketType type, String ticket, int expiresInSeconds);

  String getAppId();

  String getSecret();

  String getToken();

  String getAesKey();

  String getTemplateId();

  long getExpiresTime();

  String getOauth2redirectUri();

  String getHttpProxyHost();

  int getHttpProxyPort();

  String getHttpProxyUsername();

  String getHttpProxyPassword();

  File getTmpDirFile();

  /**
   * http client builder.
   *
   * @return ApacheHttpClientBuilder
   */
  ApacheHttpClientBuilder getApacheHttpClientBuilder();

  /**
   * 是否自动刷新token.
   */
  boolean autoRefreshToken();

}

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

在线程安全的基础上使用变量

用操作accessToken来举例:

1.获取accessToken

this.getWxMpConfigStorage().isAccessTokenExpired()

2.获取锁

Lock lock = this.getWxMpConfigStorage().getAccessTokenLock();

3.构建url

String url = String.format(WxMpService.GET_ACCESS_TOKEN_URL,
        this.getWxMpConfigStorage().getAppId(), this.getWxMpConfigStorage().getSecret());

4.发送http请求

//目前HttpClient最新版的实现类为CloseableHttpClient
CloseableHttpResponse response = getRequestHttpClient().execute(httpGet)

5.处理返回结果

String resultContent = new BasicResponseHandler().handleResponse(response);

6.获取token

WxAccessToken accessToken = WxAccessToken.fromJson(resultContent);

7.更新内存

 this.getWxMpConfigStorage().updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn());

8.返回token

return this.getWxMpConfigStorage().getAccessToken();

9.释放锁

lock.unlock();

 

你可能感兴趣的:(微信后台)