mirror of
				https://gitee.com/binary/weixin-java-tools.git
				synced 2025-10-31 10:38:42 +08:00 
			
		
		
		
	修复基于Redis的微信配置的bug
This commit is contained in:
		| @ -1,21 +1,14 @@ | ||||
| package me.chanjar.weixin.mp.api; | ||||
|  | ||||
| import me.chanjar.weixin.common.bean.WxAccessToken; | ||||
| import me.chanjar.weixin.common.util.ToStringUtils; | ||||
| import me.chanjar.weixin.common.util.http.ApacheHttpClientBuilder; | ||||
| import redis.clients.jedis.Jedis; | ||||
|  | ||||
| import javax.net.ssl.SSLContext; | ||||
| import java.io.File; | ||||
| import java.util.concurrent.locks.Lock; | ||||
| import java.util.concurrent.locks.ReentrantLock; | ||||
|  | ||||
| /** | ||||
|  * 基于Redis的微信配置provider | ||||
|  * | ||||
|  * @author lly835 | ||||
|  */ | ||||
| public class WxMpInRedisConfigStorage implements WxMpConfigStorage { | ||||
| @SuppressWarnings("hiding") | ||||
| public class WxMpInRedisConfigStorage extends WxMpInMemoryConfigStorage { | ||||
|  | ||||
|   private final static String ACCESS_TOKEN_KEY = "wechat_access_token_"; | ||||
|  | ||||
| @ -23,43 +16,6 @@ public class WxMpInRedisConfigStorage implements WxMpConfigStorage { | ||||
|  | ||||
|   private final static String CARDAPI_TICKET_KEY = "wechat_cardapi_ticket_"; | ||||
|  | ||||
|   protected volatile String appId; | ||||
|   protected volatile String secret; | ||||
|   protected volatile String partnerId; | ||||
|   protected volatile String partnerKey; | ||||
|   protected volatile String notifyURL; | ||||
|   protected volatile String tradeType; | ||||
|   protected volatile String token; | ||||
|   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 cardApiTicket; | ||||
|   protected volatile long cardApiTicketExpiresTime; | ||||
|  | ||||
|   protected Lock accessTokenLock = new ReentrantLock(); | ||||
|   protected Lock jsapiTicketLock = new ReentrantLock(); | ||||
|   protected Lock cardApiTicketLock = new ReentrantLock(); | ||||
|  | ||||
|   /** | ||||
|    * 临时文件目录 | ||||
|    */ | ||||
|   protected volatile File tmpDirFile; | ||||
|  | ||||
|   protected volatile SSLContext sslContext; | ||||
|  | ||||
|   protected volatile ApacheHttpClientBuilder apacheHttpClientBuilder; | ||||
|  | ||||
|   protected Jedis jedis; | ||||
|  | ||||
|   @Override | ||||
| @ -67,46 +23,25 @@ public class WxMpInRedisConfigStorage implements WxMpConfigStorage { | ||||
|     return jedis.get(ACCESS_TOKEN_KEY.concat(appId)); | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public Lock getAccessTokenLock() { | ||||
|     return this.accessTokenLock; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public boolean isAccessTokenExpired() { | ||||
|       return getAccessToken() == null ? true : false; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public synchronized void updateAccessToken(WxAccessToken accessToken) { | ||||
|     updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn()); | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
| @Override | ||||
|   public synchronized void updateAccessToken(String accessToken, int expiresInSeconds) { | ||||
|     this.accessToken = accessToken; | ||||
|     this.expiresTime = System.currentTimeMillis() + (expiresInSeconds - 200) * 1000L; | ||||
|     jedis.set(ACCESS_TOKEN_KEY.concat(appId), accessToken); | ||||
|     jedis.expire(ACCESS_TOKEN_KEY.concat(appId), expiresInSeconds - 200); | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public void expireAccessToken() { | ||||
|     this.expiresTime = 0; | ||||
|     jedis.expire(ACCESS_TOKEN_KEY.concat(appId), 0); | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public String getJsapiTicket() { | ||||
|     return this.jsapiTicket; | ||||
|   } | ||||
|  | ||||
|   public void setJsapiTicket(String jsapiTicket) { | ||||
|     this.jsapiTicket = jsapiTicket; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public Lock getJsapiTicketLock() { | ||||
|     return this.jsapiTicketLock; | ||||
|     return jedis.get(JSAPI_TICKET_KEY.concat(appId)); | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
| @ -116,16 +51,13 @@ public class WxMpInRedisConfigStorage implements WxMpConfigStorage { | ||||
|  | ||||
|   @Override | ||||
|   public synchronized void updateJsapiTicket(String jsapiTicket, int expiresInSeconds) { | ||||
|     this.jsapiTicket = jsapiTicket; | ||||
|     // 预留200秒的时间 | ||||
|     this.jsapiTicketExpiresTime = System.currentTimeMillis() + (expiresInSeconds - 200) * 1000L; | ||||
|     jedis.set(JSAPI_TICKET_KEY.concat(appId), accessToken); | ||||
|     jedis.set(JSAPI_TICKET_KEY.concat(appId), jsapiTicket); | ||||
|     jedis.expire(JSAPI_TICKET_KEY.concat(appId), expiresInSeconds - 200); | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public void expireJsapiTicket() { | ||||
|     this.jsapiTicketExpiresTime = 0; | ||||
|     jedis.expire(JSAPI_TICKET_KEY.concat(appId), 0); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
| @ -133,177 +65,26 @@ public class WxMpInRedisConfigStorage implements WxMpConfigStorage { | ||||
|    */ | ||||
|   @Override | ||||
|   public String getCardApiTicket() { | ||||
|     return this.cardApiTicket; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public Lock getCardApiTicketLock() { | ||||
|     return this.cardApiTicketLock; | ||||
|     return jedis.get(CARDAPI_TICKET_KEY.concat(appId)); | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public boolean isCardApiTicketExpired() { | ||||
|     return System.currentTimeMillis() > this.cardApiTicketExpiresTime; | ||||
|     return getCardApiTicket() == null ? true : false; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public synchronized void updateCardApiTicket(String cardApiTicket, int expiresInSeconds) { | ||||
|     this.cardApiTicket = cardApiTicket; | ||||
|     // 预留200秒的时间 | ||||
|     this.cardApiTicketExpiresTime = System.currentTimeMillis() + (expiresInSeconds - 200) * 1000L; | ||||
|     jedis.set(CARDAPI_TICKET_KEY.concat(appId), accessToken); | ||||
|     jedis.set(CARDAPI_TICKET_KEY.concat(appId), cardApiTicket); | ||||
|     jedis.expire(CARDAPI_TICKET_KEY.concat(appId), expiresInSeconds - 200); | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public void expireCardApiTicket() { | ||||
|     this.cardApiTicketExpiresTime = 0; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public String getAppId() { | ||||
|     return this.appId; | ||||
|   } | ||||
|  | ||||
|   public void setAppId(String appId) { | ||||
|     this.appId = appId; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public String getSecret() { | ||||
|     return this.secret; | ||||
|   } | ||||
|  | ||||
|   public void setSecret(String secret) { | ||||
|     this.secret = secret; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public String getToken() { | ||||
|     return this.token; | ||||
|   } | ||||
|  | ||||
|   public void setToken(String token) { | ||||
|     this.token = token; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public long getExpiresTime() { | ||||
|     return this.expiresTime; | ||||
|   } | ||||
|  | ||||
|   public void setExpiresTime(long expiresTime) { | ||||
|     this.expiresTime = expiresTime; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public String getAesKey() { | ||||
|     return this.aesKey; | ||||
|   } | ||||
|  | ||||
|   public void setAesKey(String aesKey) { | ||||
|     this.aesKey = aesKey; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public String getOauth2redirectUri() { | ||||
|     return this.oauth2redirectUri; | ||||
|   } | ||||
|  | ||||
|   public void setOauth2redirectUri(String oauth2redirectUri) { | ||||
|     this.oauth2redirectUri = oauth2redirectUri; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public String getHttpProxyHost() { | ||||
|     return this.httpProxyHost; | ||||
|   } | ||||
|  | ||||
|   public void setHttpProxyHost(String httpProxyHost) { | ||||
|     this.httpProxyHost = httpProxyHost; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public int getHttpProxyPort() { | ||||
|     return this.httpProxyPort; | ||||
|   } | ||||
|  | ||||
|   public void setHttpProxyPort(int httpProxyPort) { | ||||
|     this.httpProxyPort = httpProxyPort; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public String getHttpProxyUsername() { | ||||
|     return this.httpProxyUsername; | ||||
|   } | ||||
|  | ||||
|   public void setHttpProxyUsername(String httpProxyUsername) { | ||||
|     this.httpProxyUsername = httpProxyUsername; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public String getHttpProxyPassword() { | ||||
|     return this.httpProxyPassword; | ||||
|   } | ||||
|  | ||||
|   public void setHttpProxyPassword(String httpProxyPassword) { | ||||
|     this.httpProxyPassword = httpProxyPassword; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public String toString() { | ||||
|     return ToStringUtils.toSimpleString(this); | ||||
|   } | ||||
|  | ||||
|   public void setPartnerId(String partnerId) { | ||||
|     this.partnerId = partnerId; | ||||
|   } | ||||
|  | ||||
|   public void setPartnerKey(String partnerKey) { | ||||
|     this.partnerKey = partnerKey; | ||||
|   } | ||||
|  | ||||
|  | ||||
|   public String getNotifyURL() { | ||||
|     return notifyURL; | ||||
|   } | ||||
|  | ||||
|   public void setNotifyURL(String notifyURL) { | ||||
|     this.notifyURL = notifyURL; | ||||
|   } | ||||
|  | ||||
|   public String getTradeType() { | ||||
|     return tradeType; | ||||
|   } | ||||
|  | ||||
|   public void setTradeType(String tradeType) { | ||||
|     this.tradeType = tradeType; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public File getTmpDirFile() { | ||||
|     return this.tmpDirFile; | ||||
|   } | ||||
|  | ||||
|   public void setTmpDirFile(File tmpDirFile) { | ||||
|     this.tmpDirFile = tmpDirFile; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public ApacheHttpClientBuilder getApacheHttpClientBuilder() { | ||||
|     return this.apacheHttpClientBuilder; | ||||
|   } | ||||
|  | ||||
|   public void setApacheHttpClientBuilder(ApacheHttpClientBuilder apacheHttpClientBuilder) { | ||||
|     this.apacheHttpClientBuilder = apacheHttpClientBuilder; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public boolean autoRefreshToken() { | ||||
|     return true; | ||||
|     jedis.expire(CARDAPI_TICKET_KEY.concat(appId), 0); | ||||
|   } | ||||
|  | ||||
|   public void setJedis(Jedis jedis) { | ||||
|         this.jedis = jedis; | ||||
|     } | ||||
|     this.jedis = jedis; | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 flying
					flying