|
@@ -1,11 +1,12 @@ |
|
|
package me.chanjar.weixin.mp.api; |
|
|
package me.chanjar.weixin.mp.api; |
|
|
|
|
|
|
|
|
import redis.clients.jedis.Jedis; |
|
|
import redis.clients.jedis.Jedis; |
|
|
|
|
|
import redis.clients.jedis.JedisPool; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 基于Redis的微信配置provider |
|
|
* 基于Redis的微信配置provider |
|
|
* |
|
|
* |
|
|
* @author lly835 |
|
|
|
|
|
|
|
|
* @author nickwong |
|
|
*/ |
|
|
*/ |
|
|
@SuppressWarnings("hiding") |
|
|
@SuppressWarnings("hiding") |
|
|
public class WxMpInRedisConfigStorage extends WxMpInMemoryConfigStorage { |
|
|
public class WxMpInRedisConfigStorage extends WxMpInMemoryConfigStorage { |
|
@@ -16,75 +17,115 @@ public class WxMpInRedisConfigStorage extends WxMpInMemoryConfigStorage { |
|
|
|
|
|
|
|
|
private final static String CARDAPI_TICKET_KEY = "wechat_cardapi_ticket_"; |
|
|
private final static String CARDAPI_TICKET_KEY = "wechat_cardapi_ticket_"; |
|
|
|
|
|
|
|
|
protected Jedis jedis; |
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 使用连接池保证线程安全 |
|
|
|
|
|
*/ |
|
|
|
|
|
protected final JedisPool jedisPool; |
|
|
|
|
|
|
|
|
|
|
|
private String accessTokenKey; |
|
|
|
|
|
|
|
|
|
|
|
private String jsapiTicketKey; |
|
|
|
|
|
|
|
|
|
|
|
private String cardapiTicketKey; |
|
|
|
|
|
|
|
|
|
|
|
public WxMpInRedisConfigStorage(JedisPool jedisPool) { |
|
|
|
|
|
this.jedisPool = jedisPool; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 每个公众号生成独有的存储key |
|
|
|
|
|
* |
|
|
|
|
|
* @param appId |
|
|
|
|
|
*/ |
|
|
|
|
|
@Override |
|
|
|
|
|
public void setAppId(String appId) { |
|
|
|
|
|
super.setAppId(appId); |
|
|
|
|
|
this.accessTokenKey = ACCESS_TOKEN_KEY.concat(appId); |
|
|
|
|
|
this.jsapiTicketKey = JSAPI_TICKET_KEY.concat(appId); |
|
|
|
|
|
this.cardapiTicketKey = CARDAPI_TICKET_KEY.concat(appId); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public String getAccessToken() { |
|
|
public String getAccessToken() { |
|
|
return jedis.get(ACCESS_TOKEN_KEY.concat(appId)); |
|
|
|
|
|
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
|
|
return jedis.get(accessTokenKey); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public boolean isAccessTokenExpired() { |
|
|
public boolean isAccessTokenExpired() { |
|
|
return jedis.ttl(ACCESS_TOKEN_KEY.concat(appId)) < 2; |
|
|
|
|
|
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
|
|
return jedis.ttl(accessTokenKey) < 2; |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public synchronized void updateAccessToken(String accessToken, int expiresInSeconds) { |
|
|
public synchronized void updateAccessToken(String accessToken, int expiresInSeconds) { |
|
|
jedis.set(ACCESS_TOKEN_KEY.concat(appId), accessToken); |
|
|
|
|
|
jedis.expire(ACCESS_TOKEN_KEY.concat(appId), expiresInSeconds - 200); |
|
|
|
|
|
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
|
|
jedis.setex(accessTokenKey, expiresInSeconds - 200, accessToken); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public void expireAccessToken() { |
|
|
public void expireAccessToken() { |
|
|
jedis.expire(ACCESS_TOKEN_KEY.concat(appId), 0); |
|
|
|
|
|
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
|
|
jedis.expire(accessTokenKey, 0); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public String getJsapiTicket() { |
|
|
public String getJsapiTicket() { |
|
|
return jedis.get(JSAPI_TICKET_KEY.concat(appId)); |
|
|
|
|
|
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
|
|
return jedis.get(jsapiTicketKey); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public boolean isJsapiTicketExpired() { |
|
|
public boolean isJsapiTicketExpired() { |
|
|
return jedis.ttl(JSAPI_TICKET_KEY.concat(appId)) < 2; |
|
|
|
|
|
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
|
|
return jedis.ttl(jsapiTicketKey) < 2; |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public synchronized void updateJsapiTicket(String jsapiTicket, int expiresInSeconds) { |
|
|
public synchronized void updateJsapiTicket(String jsapiTicket, int expiresInSeconds) { |
|
|
jedis.set(JSAPI_TICKET_KEY.concat(appId), jsapiTicket); |
|
|
|
|
|
jedis.expire(JSAPI_TICKET_KEY.concat(appId), expiresInSeconds - 200); |
|
|
|
|
|
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
|
|
jedis.setex(jsapiTicketKey, expiresInSeconds - 200, jsapiTicket); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public void expireJsapiTicket() { |
|
|
public void expireJsapiTicket() { |
|
|
jedis.expire(JSAPI_TICKET_KEY.concat(appId), 0); |
|
|
|
|
|
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
|
|
jedis.expire(jsapiTicketKey, 0); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 卡券api_ticket |
|
|
|
|
|
*/ |
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public String getCardApiTicket() { |
|
|
public String getCardApiTicket() { |
|
|
return jedis.get(CARDAPI_TICKET_KEY.concat(appId)); |
|
|
|
|
|
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
|
|
return jedis.get(cardapiTicketKey); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public boolean isCardApiTicketExpired() { |
|
|
public boolean isCardApiTicketExpired() { |
|
|
return jedis.ttl(CARDAPI_TICKET_KEY.concat(appId)) < 2; |
|
|
|
|
|
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
|
|
return jedis.ttl(cardapiTicketKey) < 2; |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public synchronized void updateCardApiTicket(String cardApiTicket, int expiresInSeconds) { |
|
|
public synchronized void updateCardApiTicket(String cardApiTicket, int expiresInSeconds) { |
|
|
jedis.set(CARDAPI_TICKET_KEY.concat(appId), cardApiTicket); |
|
|
|
|
|
jedis.expire(CARDAPI_TICKET_KEY.concat(appId), expiresInSeconds - 200); |
|
|
|
|
|
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
|
|
jedis.setex(cardapiTicketKey, expiresInSeconds - 200, cardApiTicket); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public void expireCardApiTicket() { |
|
|
public void expireCardApiTicket() { |
|
|
jedis.expire(CARDAPI_TICKET_KEY.concat(appId), 0); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void setJedis(Jedis jedis) { |
|
|
|
|
|
this.jedis = jedis; |
|
|
|
|
|
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
|
|
jedis.expire(cardapiTicketKey, 0); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |