@@ -242,6 +242,12 @@ | |||
<version>2.9.0</version> | |||
<scope>provided</scope> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.redisson</groupId> | |||
<artifactId>redisson</artifactId> | |||
<version>3.12.0</version> | |||
<scope>provided</scope> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.projectlombok</groupId> | |||
<artifactId>lombok</artifactId> | |||
@@ -24,6 +24,11 @@ | |||
<artifactId>jedis</artifactId> | |||
<scope>compile</scope> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.redisson</groupId> | |||
<artifactId>redisson</artifactId> | |||
<scope>compile</scope> | |||
</dependency> | |||
</dependencies> | |||
<build> | |||
@@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor; | |||
import me.chanjar.weixin.mp.config.WxMpConfigStorage; | |||
import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl; | |||
import me.chanjar.weixin.mp.config.impl.WxMpRedisConfigImpl; | |||
import org.redisson.api.RedissonClient; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; | |||
import org.springframework.context.annotation.Bean; | |||
@@ -26,6 +27,9 @@ public class WxMpStorageAutoConfiguration { | |||
@Autowired(required = false) | |||
private JedisPool jedisPool; | |||
@Autowired(required = false) | |||
private RedissonClient redissonClient; | |||
@Bean | |||
@ConditionalOnMissingBean(WxMpConfigStorage.class) | |||
public WxMpConfigStorage wxMpInMemoryConfigStorage() { | |||
@@ -24,6 +24,11 @@ | |||
<artifactId>jedis</artifactId> | |||
<scope>compile</scope> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.redisson</groupId> | |||
<artifactId>redisson</artifactId> | |||
<scope>compile</scope> | |||
</dependency> | |||
</dependencies> | |||
<build> | |||
@@ -6,7 +6,12 @@ import lombok.RequiredArgsConstructor; | |||
import me.chanjar.weixin.open.api.WxOpenConfigStorage; | |||
import me.chanjar.weixin.open.api.impl.WxOpenInMemoryConfigStorage; | |||
import me.chanjar.weixin.open.api.impl.WxOpenInRedisConfigStorage; | |||
import me.chanjar.weixin.open.api.impl.WxOpenInRedissonConfigStorage; | |||
import org.apache.commons.lang3.StringUtils; | |||
import org.redisson.Redisson; | |||
import org.redisson.api.RedissonClient; | |||
import org.redisson.config.Config; | |||
import org.redisson.config.TransportMode; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.beans.factory.annotation.Value; | |||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; | |||
@@ -28,6 +33,9 @@ public class WxOpenStorageAutoConfiguration { | |||
@Autowired(required = false) | |||
private JedisPool jedisPool; | |||
@Autowired(required = false) | |||
private RedissonClient redissonClient; | |||
@Value("${wx.open.config-storage.redis.host:}") | |||
private String redisHost; | |||
@@ -40,12 +48,20 @@ public class WxOpenStorageAutoConfiguration { | |||
if (type == WxOpenProperties.StorageType.redis) { | |||
return getWxOpenInRedisConfigStorage(); | |||
} | |||
if (type == WxOpenProperties.StorageType.jedis){ | |||
return getWxOpenInRedisConfigStorage(); | |||
} | |||
if (type == WxOpenProperties.StorageType.redisson){ | |||
return getWxOpenInRedissonConfigStorage(); | |||
} | |||
return getWxOpenInMemoryConfigStorage(); | |||
} | |||
private WxOpenInMemoryConfigStorage getWxOpenInMemoryConfigStorage() { | |||
WxOpenInMemoryConfigStorage config = new WxOpenInMemoryConfigStorage(); | |||
setWxOpenInfo(config); | |||
config.setWxOpenInfo(properties.getAppId(),properties.getSecret(), properties.getToken(), properties.getAesKey()); | |||
return config; | |||
} | |||
@@ -55,17 +71,21 @@ public class WxOpenStorageAutoConfiguration { | |||
poolToUse = getJedisPool(); | |||
} | |||
WxOpenInRedisConfigStorage config = new WxOpenInRedisConfigStorage(poolToUse); | |||
setWxOpenInfo(config); | |||
config.setWxOpenInfo(properties.getAppId(),properties.getSecret(), properties.getToken(), properties.getAesKey()); | |||
return config; | |||
} | |||
private void setWxOpenInfo(WxOpenConfigStorage config) { | |||
config.setComponentAppId(properties.getAppId()); | |||
config.setComponentAppSecret(properties.getSecret()); | |||
config.setComponentToken(properties.getToken()); | |||
config.setComponentAesKey(properties.getAesKey()); | |||
private WxOpenInRedissonConfigStorage getWxOpenInRedissonConfigStorage(){ | |||
RedissonClient redissonClientToUse = this.redissonClient; | |||
if(redissonClient == null){ | |||
redissonClientToUse = getRedissonClient(); | |||
} | |||
WxOpenInRedissonConfigStorage config = new WxOpenInRedissonConfigStorage(redissonClientToUse); | |||
config.setWxOpenInfo(properties.getAppId(),properties.getSecret(), properties.getToken(), properties.getAesKey()); | |||
return config; | |||
} | |||
private JedisPool getJedisPool() { | |||
WxOpenProperties.ConfigStorage storage = properties.getConfigStorage(); | |||
RedisProperties redis = storage.getRedis(); | |||
@@ -90,4 +110,16 @@ public class WxOpenStorageAutoConfiguration { | |||
redis.getTimeout(), redis.getPassword(), redis.getDatabase()); | |||
return pool; | |||
} | |||
private RedissonClient getRedissonClient(){ | |||
WxOpenProperties.ConfigStorage storage = properties.getConfigStorage(); | |||
RedisProperties redis = storage.getRedis(); | |||
Config config = new Config(); | |||
config.useSingleServer() | |||
.setAddress("redis://" + redis.getHost() + ":" + redis.getPort()) | |||
.setPassword(redis.getPassword()); | |||
config.setTransportMode(TransportMode.NIO); | |||
return Redisson.create(config); | |||
} | |||
} |
@@ -63,6 +63,14 @@ public class WxOpenProperties { | |||
/** | |||
* redis. | |||
*/ | |||
redis | |||
redis, | |||
/** | |||
* jedis. | |||
*/ | |||
jedis, | |||
/** | |||
* redisson. | |||
*/ | |||
redisson | |||
} | |||
} |
@@ -87,6 +87,10 @@ | |||
<groupId>org.projectlombok</groupId> | |||
<artifactId>lombok</artifactId> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.redisson</groupId> | |||
<artifactId>redisson</artifactId> | |||
</dependency> | |||
</dependencies> | |||
<build> | |||
@@ -128,4 +128,13 @@ public interface WxOpenConfigStorage { | |||
* @param expiresInSeconds 过期时间,以秒为单位 | |||
*/ | |||
void updateCardApiTicket(String appId, String cardApiTicket, int expiresInSeconds); | |||
/** | |||
* 设置第三方平台基础信息 | |||
* @param componentAppId 第三方平台 appid | |||
* @param componentAppSecret 第三方平台 appsecret | |||
* @param componentToken 消息校验Token | |||
* @param componentAesKey 消息加解密Key | |||
*/ | |||
void setWxOpenInfo(String componentAppId, String componentAppSecret, String componentToken, String componentAesKey); | |||
} |
@@ -0,0 +1,47 @@ | |||
package me.chanjar.weixin.open.api.impl; | |||
import org.apache.commons.lang3.StringUtils; | |||
/** | |||
* @author yangyidian | |||
* @date 2020/01/09 | |||
**/ | |||
public abstract class AbstractWxOpenInRedisConfigStorage extends WxOpenInMemoryConfigStorage { | |||
protected final static String COMPONENT_VERIFY_TICKET_KEY = "wechat_component_verify_ticket:"; | |||
protected final static String COMPONENT_ACCESS_TOKEN_KEY = "wechat_component_access_token:"; | |||
protected final static String AUTHORIZER_REFRESH_TOKEN_KEY = "wechat_authorizer_refresh_token:"; | |||
protected final static String AUTHORIZER_ACCESS_TOKEN_KEY = "wechat_authorizer_access_token:"; | |||
protected final static String JSAPI_TICKET_KEY = "wechat_jsapi_ticket:"; | |||
protected final static String CARD_API_TICKET_KEY = "wechat_card_api_ticket:"; | |||
/** | |||
* redis 存储的 key 的前缀,可为空 | |||
*/ | |||
protected String keyPrefix; | |||
protected String componentVerifyTicketKey; | |||
protected String componentAccessTokenKey; | |||
protected String authorizerRefreshTokenKey; | |||
protected String authorizerAccessTokenKey; | |||
protected String jsapiTicketKey; | |||
protected String cardApiTicket; | |||
@Override | |||
public void setComponentAppId(String componentAppId) { | |||
super.setComponentAppId(componentAppId); | |||
String prefix = StringUtils.isBlank(keyPrefix) ? "" : | |||
(StringUtils.endsWith(keyPrefix, ":") ? keyPrefix : (keyPrefix + ":")); | |||
componentVerifyTicketKey = prefix + COMPONENT_VERIFY_TICKET_KEY.concat(componentAppId); | |||
componentAccessTokenKey = prefix + COMPONENT_ACCESS_TOKEN_KEY.concat(componentAppId); | |||
authorizerRefreshTokenKey = prefix + AUTHORIZER_REFRESH_TOKEN_KEY.concat(componentAppId); | |||
authorizerAccessTokenKey = prefix + AUTHORIZER_ACCESS_TOKEN_KEY.concat(componentAppId); | |||
this.jsapiTicketKey = JSAPI_TICKET_KEY.concat(componentAppId); | |||
this.cardApiTicket = CARD_API_TICKET_KEY.concat(componentAppId); | |||
} | |||
protected String getKey(String prefix, String appId) { | |||
return prefix.endsWith(":") ? prefix.concat(appId) : prefix.concat(":").concat(appId); | |||
} | |||
} |
@@ -2,6 +2,7 @@ package me.chanjar.weixin.open.api.impl; | |||
import cn.binarywang.wx.miniapp.config.WxMaConfig; | |||
import lombok.Data; | |||
import me.chanjar.weixin.common.bean.WxAccessToken; | |||
import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder; | |||
import me.chanjar.weixin.mp.bean.WxMpHostConfig; | |||
@@ -23,6 +24,7 @@ import java.util.concurrent.locks.ReentrantLock; | |||
* | |||
* @author <a href="https://github.com/007gzs">007</a> | |||
*/ | |||
@Data | |||
public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage { | |||
private String componentAppId; | |||
private String componentAppSecret; | |||
@@ -43,60 +45,7 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage { | |||
private Map<String, Token> jsapiTickets = new ConcurrentHashMap<>(); | |||
private Map<String, Token> cardApiTickets = new ConcurrentHashMap<>(); | |||
@Override | |||
public String getComponentAppId() { | |||
return componentAppId; | |||
} | |||
@Override | |||
public void setComponentAppId(String componentAppId) { | |||
this.componentAppId = componentAppId; | |||
} | |||
@Override | |||
public String getComponentAppSecret() { | |||
return componentAppSecret; | |||
} | |||
@Override | |||
public void setComponentAppSecret(String componentAppSecret) { | |||
this.componentAppSecret = componentAppSecret; | |||
} | |||
@Override | |||
public String getComponentToken() { | |||
return componentToken; | |||
} | |||
@Override | |||
public void setComponentToken(String componentToken) { | |||
this.componentToken = componentToken; | |||
} | |||
@Override | |||
public String getComponentAesKey() { | |||
return componentAesKey; | |||
} | |||
@Override | |||
public void setComponentAesKey(String componentAesKey) { | |||
this.componentAesKey = componentAesKey; | |||
} | |||
@Override | |||
public String getComponentVerifyTicket() { | |||
return componentVerifyTicket; | |||
} | |||
@Override | |||
public void setComponentVerifyTicket(String componentVerifyTicket) { | |||
this.componentVerifyTicket = componentVerifyTicket; | |||
} | |||
@Override | |||
public String getComponentAccessToken() { | |||
return componentAccessToken; | |||
} | |||
@Override | |||
public boolean isComponentAccessTokenExpired() { | |||
@@ -113,51 +62,6 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage { | |||
updateComponentAccessToken(componentAccessToken.getComponentAccessToken(), componentAccessToken.getExpiresIn()); | |||
} | |||
@Override | |||
public String getHttpProxyHost() { | |||
return httpProxyHost; | |||
} | |||
public void setHttpProxyHost(String httpProxyHost) { | |||
this.httpProxyHost = httpProxyHost; | |||
} | |||
@Override | |||
public int getHttpProxyPort() { | |||
return httpProxyPort; | |||
} | |||
public void setHttpProxyPort(int httpProxyPort) { | |||
this.httpProxyPort = httpProxyPort; | |||
} | |||
@Override | |||
public String getHttpProxyUsername() { | |||
return httpProxyUsername; | |||
} | |||
public void setHttpProxyUsername(String httpProxyUsername) { | |||
this.httpProxyUsername = httpProxyUsername; | |||
} | |||
@Override | |||
public String getHttpProxyPassword() { | |||
return httpProxyPassword; | |||
} | |||
public void setHttpProxyPassword(String httpProxyPassword) { | |||
this.httpProxyPassword = httpProxyPassword; | |||
} | |||
@Override | |||
public ApacheHttpClientBuilder getApacheHttpClientBuilder() { | |||
return apacheHttpClientBuilder; | |||
} | |||
public ApacheHttpClientBuilder setApacheHttpClientBuilder(ApacheHttpClientBuilder apacheHttpClientBuilder) { | |||
return this.apacheHttpClientBuilder = apacheHttpClientBuilder; | |||
} | |||
@Override | |||
public WxMpConfigStorage getWxMpConfigStorage(String appId) { | |||
return new WxOpenInnerConfigStorage(this, appId); | |||
@@ -174,6 +78,14 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage { | |||
this.componentExpiresTime = System.currentTimeMillis() + (expiresInSeconds - 200) * 1000L; | |||
} | |||
@Override | |||
public void setWxOpenInfo(String componentAppId, String componentAppSecret, String componentToken, String componentAesKey) { | |||
setComponentAppId(componentAppId); | |||
setComponentAppSecret(componentAppSecret); | |||
setComponentToken(componentToken); | |||
setComponentAesKey(componentAesKey); | |||
} | |||
@Override | |||
public boolean autoRefreshToken() { | |||
return true; | |||
@@ -1,6 +1,5 @@ | |||
package me.chanjar.weixin.open.api.impl; | |||
import org.apache.commons.lang3.StringUtils; | |||
import redis.clients.jedis.Jedis; | |||
import redis.clients.jedis.JedisPool; | |||
import redis.clients.util.Pool; | |||
@@ -8,26 +7,9 @@ import redis.clients.util.Pool; | |||
/** | |||
* @author <a href="https://github.com/007gzs">007</a> | |||
*/ | |||
public class WxOpenInRedisConfigStorage extends WxOpenInMemoryConfigStorage { | |||
private final static String COMPONENT_VERIFY_TICKET_KEY = "wechat_component_verify_ticket:"; | |||
private final static String COMPONENT_ACCESS_TOKEN_KEY = "wechat_component_access_token:"; | |||
private final static String AUTHORIZER_REFRESH_TOKEN_KEY = "wechat_authorizer_refresh_token:"; | |||
private final static String AUTHORIZER_ACCESS_TOKEN_KEY = "wechat_authorizer_access_token:"; | |||
private final static String JSAPI_TICKET_KEY = "wechat_jsapi_ticket:"; | |||
private final static String CARD_API_TICKET_KEY = "wechat_card_api_ticket:"; | |||
public class WxOpenInRedisConfigStorage extends AbstractWxOpenInRedisConfigStorage { | |||
protected final Pool<Jedis> jedisPool; | |||
/** | |||
* redis 存储的 key 的前缀,可为空 | |||
*/ | |||
private String keyPrefix; | |||
private String componentVerifyTicketKey; | |||
private String componentAccessTokenKey; | |||
private String authorizerRefreshTokenKey; | |||
private String authorizerAccessTokenKey; | |||
private String jsapiTicketKey; | |||
private String cardApiTicket; | |||
public WxOpenInRedisConfigStorage(Pool<Jedis> jedisPool) { | |||
this.jedisPool = jedisPool; | |||
@@ -42,19 +24,6 @@ public class WxOpenInRedisConfigStorage extends WxOpenInMemoryConfigStorage { | |||
this.jedisPool = jedisPool; | |||
} | |||
@Override | |||
public void setComponentAppId(String componentAppId) { | |||
super.setComponentAppId(componentAppId); | |||
String prefix = StringUtils.isBlank(keyPrefix) ? "" : | |||
(StringUtils.endsWith(keyPrefix, ":") ? keyPrefix : (keyPrefix + ":")); | |||
componentVerifyTicketKey = prefix + COMPONENT_VERIFY_TICKET_KEY.concat(componentAppId); | |||
componentAccessTokenKey = prefix + COMPONENT_ACCESS_TOKEN_KEY.concat(componentAppId); | |||
authorizerRefreshTokenKey = prefix + AUTHORIZER_REFRESH_TOKEN_KEY.concat(componentAppId); | |||
authorizerAccessTokenKey = prefix + AUTHORIZER_ACCESS_TOKEN_KEY.concat(componentAppId); | |||
this.jsapiTicketKey = JSAPI_TICKET_KEY.concat(componentAppId); | |||
this.cardApiTicket = CARD_API_TICKET_KEY.concat(componentAppId); | |||
} | |||
@Override | |||
public String getComponentVerifyTicket() { | |||
try (Jedis jedis = this.jedisPool.getResource()) { | |||
@@ -97,10 +66,6 @@ public class WxOpenInRedisConfigStorage extends WxOpenInMemoryConfigStorage { | |||
} | |||
} | |||
private String getKey(String prefix, String appId) { | |||
return prefix.endsWith(":") ? prefix.concat(appId) : prefix.concat(":").concat(appId); | |||
} | |||
@Override | |||
public String getAuthorizerRefreshToken(String appId) { | |||
try (Jedis jedis = this.jedisPool.getResource()) { | |||
@@ -0,0 +1,128 @@ | |||
package me.chanjar.weixin.open.api.impl; | |||
import java.util.concurrent.TimeUnit; | |||
import org.redisson.api.RedissonClient; | |||
/** | |||
* @author yangyidian | |||
* @date 2020/01/06 | |||
**/ | |||
public class WxOpenInRedissonConfigStorage extends AbstractWxOpenInRedisConfigStorage{ | |||
private RedissonClient redissonClient; | |||
public WxOpenInRedissonConfigStorage(RedissonClient redissonClient, String keyPrefix) { | |||
this.keyPrefix = keyPrefix; | |||
this.redissonClient = redissonClient; | |||
} | |||
public WxOpenInRedissonConfigStorage(RedissonClient redissonClient) { | |||
this.redissonClient = redissonClient; | |||
} | |||
@Override | |||
public String getComponentVerifyTicket() { | |||
Object value = redissonClient.getBucket(this.componentVerifyTicketKey).get(); | |||
return value == null ? null : value.toString(); | |||
} | |||
@Override | |||
public void setComponentVerifyTicket(String componentVerifyTicket) { | |||
redissonClient.getBucket(this.componentVerifyTicketKey).set(componentVerifyTicket); | |||
} | |||
@Override | |||
public String getComponentAccessToken() { | |||
Object value = redissonClient.getBucket(this.componentAccessTokenKey).get(); | |||
return value == null ? null : value.toString(); | |||
} | |||
@Override | |||
public boolean isComponentAccessTokenExpired() { | |||
return redissonClient.getBucket(this.componentAccessTokenKey).remainTimeToLive() < 2; | |||
} | |||
@Override | |||
public void expireComponentAccessToken() { | |||
redissonClient.getBucket(this.componentAccessTokenKey).expire(0, TimeUnit.SECONDS); | |||
} | |||
@Override | |||
public void updateComponentAccessToken(String componentAccessToken, int expiresInSeconds) { | |||
redissonClient.getBucket(this.componentAccessTokenKey).set(componentAccessToken, expiresInSeconds - 200, TimeUnit.SECONDS); | |||
} | |||
@Override | |||
public String getAuthorizerRefreshToken(String appId) { | |||
Object value = redissonClient.getBucket(this.getKey(this.authorizerRefreshTokenKey, appId)).get(); | |||
return value == null ? null : value.toString(); | |||
} | |||
@Override | |||
public void setAuthorizerRefreshToken(String appId, String authorizerRefreshToken) { | |||
redissonClient.getBucket(this.getKey(this.authorizerRefreshTokenKey, appId)).set(authorizerRefreshToken); | |||
} | |||
@Override | |||
public String getAuthorizerAccessToken(String appId) { | |||
Object value = redissonClient.getBucket(this.getKey(this.authorizerAccessTokenKey, appId)).get(); | |||
return value == null ? null : value.toString(); | |||
} | |||
@Override | |||
public boolean isAuthorizerAccessTokenExpired(String appId) { | |||
return redissonClient.getBucket(this.getKey(this.authorizerAccessTokenKey, appId)).remainTimeToLive() < 2; | |||
} | |||
@Override | |||
public void expireAuthorizerAccessToken(String appId) { | |||
redissonClient.getBucket(this.getKey(this.authorizerAccessTokenKey, appId)).expire(0, TimeUnit.SECONDS); | |||
} | |||
@Override | |||
public void updateAuthorizerAccessToken(String appId, String authorizerAccessToken, int expiresInSeconds) { | |||
redissonClient.getBucket(this.getKey(this.authorizerAccessTokenKey, appId)).set(authorizerAccessToken, expiresInSeconds - 200, TimeUnit.SECONDS); | |||
} | |||
@Override | |||
public String getJsapiTicket(String appId) { | |||
Object value = redissonClient.getBucket(this.getKey(this.jsapiTicketKey, appId)).get(); | |||
return value == null ? null : value.toString(); | |||
} | |||
@Override | |||
public boolean isJsapiTicketExpired(String appId) { | |||
return redissonClient.getBucket(this.getKey(this.jsapiTicketKey, appId)).remainTimeToLive() < 2; | |||
} | |||
@Override | |||
public void expireJsapiTicket(String appId) { | |||
redissonClient.getBucket(this.getKey(this.jsapiTicketKey, appId)).expire(0, TimeUnit.SECONDS); | |||
} | |||
@Override | |||
public void updateJsapiTicket(String appId, String jsapiTicket, int expiresInSeconds) { | |||
redissonClient.getBucket(this.getKey(this.jsapiTicketKey, appId)).set(jsapiTicket, expiresInSeconds - 200, TimeUnit.SECONDS); | |||
} | |||
@Override | |||
public String getCardApiTicket(String appId) { | |||
Object value = redissonClient.getBucket(this.getKey(this.cardApiTicket, appId)).get(); | |||
return value == null ? null : value.toString(); | |||
} | |||
@Override | |||
public boolean isCardApiTicketExpired(String appId) { | |||
return redissonClient.getBucket(this.getKey(this.cardApiTicket, appId)).remainTimeToLive() < 2; | |||
} | |||
@Override | |||
public void expireCardApiTicket(String appId) { | |||
redissonClient.getBucket(this.getKey(this.cardApiTicket, appId)).expire(0 ,TimeUnit.SECONDS); | |||
} | |||
@Override | |||
public void updateCardApiTicket(String appId, String cardApiTicket, int expiresInSeconds) { | |||
redissonClient.getBucket(this.getKey(this.cardApiTicket, appId)).set(cardApiTicket, expiresInSeconds - 200, TimeUnit.SECONDS); | |||
} | |||
} |
@@ -0,0 +1,131 @@ | |||
package me.chanjar.weixin.open.api.impl; | |||
import me.chanjar.weixin.open.api.WxOpenConfigStorage; | |||
import me.chanjar.weixin.open.bean.WxOpenAuthorizerAccessToken; | |||
import me.chanjar.weixin.open.bean.WxOpenComponentAccessToken; | |||
import org.testng.Assert; | |||
import org.testng.annotations.AfterClass; | |||
import org.testng.annotations.BeforeClass; | |||
import org.testng.annotations.Test; | |||
import redis.clients.jedis.JedisPool; | |||
public class WxOpenInRedisConfigStorageTest { | |||
private WxOpenConfigStorage wxOpenConfigStorage; | |||
private JedisPool pool; | |||
@BeforeClass | |||
public void setWxOpenConfigStorage(){ | |||
pool = new JedisPool("127.0.0.1", 6379); | |||
this.wxOpenConfigStorage = new WxOpenInRedisConfigStorage(pool); | |||
this.wxOpenConfigStorage.setWxOpenInfo("ComponentAppId", "ComponentAppSecret", "ComponentToken","ComponentAesKey"); | |||
this.wxOpenConfigStorage.setComponentVerifyTicket("ComponentVerifyTicket"); | |||
} | |||
@AfterClass | |||
public void clearResource(){ | |||
pool.close(); | |||
} | |||
@Test | |||
public void testGetComponentVerifyTicket() { | |||
String componentVerifyTicket = this.wxOpenConfigStorage.getComponentVerifyTicket(); | |||
Assert.assertEquals(componentVerifyTicket, "ComponentVerifyTicket"); | |||
} | |||
@Test | |||
public void testSetComponentVerifyTicket() { | |||
this.wxOpenConfigStorage.setComponentVerifyTicket("new ComponentVerifyTicket"); | |||
String componentVerifyTicket = this.wxOpenConfigStorage.getComponentVerifyTicket(); | |||
Assert.assertEquals(componentVerifyTicket, "new ComponentVerifyTicket"); | |||
} | |||
@Test | |||
public void testIsComponentAccessTokenExpired() { | |||
String responseContent = "{\"component_access_token\": \"new componentAccessToken\", \"expires_in\": 10000}"; | |||
WxOpenComponentAccessToken componentAccessToken = WxOpenComponentAccessToken.fromJson(responseContent); | |||
this.wxOpenConfigStorage.updateComponentAccessToken(componentAccessToken); | |||
boolean expired = this.wxOpenConfigStorage.isComponentAccessTokenExpired(); | |||
Assert.assertEquals(expired, false); | |||
this.wxOpenConfigStorage.expireComponentAccessToken(); | |||
expired = this.wxOpenConfigStorage.isComponentAccessTokenExpired(); | |||
Assert.assertEquals(expired, true); | |||
} | |||
@Test | |||
public void testGetAuthorizerRefreshToken() { | |||
String appid = "appid1"; | |||
this.wxOpenConfigStorage.setAuthorizerRefreshToken(appid, "AuthorizerRefreshToken 1"); | |||
String authorizerAccessToken = this.wxOpenConfigStorage.getAuthorizerRefreshToken(appid); | |||
Assert.assertEquals(authorizerAccessToken, "AuthorizerRefreshToken 1"); | |||
this.wxOpenConfigStorage.setAuthorizerRefreshToken(appid, "AuthorizerRefreshToken 2"); | |||
authorizerAccessToken = this.wxOpenConfigStorage.getAuthorizerRefreshToken(appid); | |||
Assert.assertEquals(authorizerAccessToken, "AuthorizerRefreshToken 2"); | |||
} | |||
@Test | |||
public void testGetAuthorizerAccessToken() { | |||
String appid = "appid1"; | |||
String responseContent = "{\"authorizer_access_token\": \"new authorizer_access_token\",\"expires_in\": 100000}"; | |||
WxOpenAuthorizerAccessToken wxOpenAuthorizerAccessToken = WxOpenAuthorizerAccessToken.fromJson(responseContent); | |||
this.wxOpenConfigStorage.updateAuthorizerAccessToken(appid, wxOpenAuthorizerAccessToken); | |||
String authorizerAccessToken = this.wxOpenConfigStorage.getAuthorizerAccessToken(appid); | |||
Assert.assertEquals(authorizerAccessToken, "new authorizer_access_token"); | |||
} | |||
@Test | |||
public void testIsAuthorizerAccessTokenExpired() { | |||
String appid = "appid1"; | |||
String responseContent = "{\"authorizer_access_token\": \"new authorizer_access_token\",\"expires_in\": 100000}"; | |||
WxOpenAuthorizerAccessToken wxOpenAuthorizerAccessToken = WxOpenAuthorizerAccessToken.fromJson(responseContent); | |||
this.wxOpenConfigStorage.updateAuthorizerAccessToken(appid, wxOpenAuthorizerAccessToken); | |||
String authorizerAccessToken = this.wxOpenConfigStorage.getAuthorizerAccessToken(appid); | |||
Assert.assertEquals(authorizerAccessToken, "new authorizer_access_token"); | |||
boolean expired = this.wxOpenConfigStorage.isAuthorizerAccessTokenExpired(appid); | |||
Assert.assertEquals(expired, false); | |||
this.wxOpenConfigStorage.expireAuthorizerAccessToken(appid); | |||
expired = this.wxOpenConfigStorage.isAuthorizerAccessTokenExpired(appid); | |||
Assert.assertEquals(expired, true); | |||
} | |||
@Test | |||
public void testGetJsapiTicket() { | |||
String appid = "appid1"; | |||
this.wxOpenConfigStorage.updateJsapiTicket(appid, "jsapiTicket", 100000); | |||
String jsapiTicket = this.wxOpenConfigStorage.getJsapiTicket(appid); | |||
Assert.assertEquals(jsapiTicket, "jsapiTicket"); | |||
boolean expired = this.wxOpenConfigStorage.isJsapiTicketExpired(appid); | |||
Assert.assertEquals(expired, false); | |||
this.wxOpenConfigStorage.expireJsapiTicket(appid); | |||
jsapiTicket = this.wxOpenConfigStorage.getJsapiTicket(appid); | |||
Assert.assertEquals(jsapiTicket, null); | |||
expired = this.wxOpenConfigStorage.isJsapiTicketExpired(appid); | |||
Assert.assertEquals(expired, true); | |||
} | |||
@Test | |||
public void testGetCardApiTicket() { | |||
String appid = "appid1"; | |||
this.wxOpenConfigStorage.updateCardApiTicket(appid, "new CardApiTicket", 10000); | |||
String cardApiTicket = this.wxOpenConfigStorage.getCardApiTicket(appid); | |||
Assert.assertEquals(cardApiTicket, "new CardApiTicket"); | |||
boolean expired = this.wxOpenConfigStorage.isCardApiTicketExpired(appid); | |||
Assert.assertEquals(expired, false); | |||
this.wxOpenConfigStorage.expireCardApiTicket(appid); | |||
expired = this.wxOpenConfigStorage.isCardApiTicketExpired(appid); | |||
Assert.assertEquals(expired, true); | |||
} | |||
} |
@@ -0,0 +1,129 @@ | |||
package me.chanjar.weixin.open.api.impl; | |||
import me.chanjar.weixin.open.api.WxOpenConfigStorage; | |||
import me.chanjar.weixin.open.bean.WxOpenAuthorizerAccessToken; | |||
import me.chanjar.weixin.open.bean.WxOpenComponentAccessToken; | |||
import org.redisson.Redisson; | |||
import org.redisson.api.RedissonClient; | |||
import org.redisson.config.Config; | |||
import org.redisson.config.TransportMode; | |||
import org.testng.Assert; | |||
import org.testng.annotations.BeforeClass; | |||
import org.testng.annotations.Test; | |||
public class WxOpenInRedissonConfigStorageTest { | |||
private WxOpenConfigStorage wxOpenConfigStorage; | |||
@BeforeClass | |||
public void setWxOpenConfigStorage(){ | |||
Config config = new Config(); | |||
config.useSingleServer().setAddress("redis://127.0.0.1:6379") | |||
.setDatabase(0); | |||
config.setTransportMode(TransportMode.NIO); | |||
RedissonClient redisson = Redisson.create(config); | |||
this.wxOpenConfigStorage = new WxOpenInRedissonConfigStorage(redisson); | |||
this.wxOpenConfigStorage.setWxOpenInfo("ComponentAppId", "ComponentAppSecret", "ComponentToken","ComponentAesKey"); | |||
this.wxOpenConfigStorage.setComponentVerifyTicket("ComponentVerifyTicket"); | |||
} | |||
@Test | |||
public void testGetComponentVerifyTicket() { | |||
String componentVerifyTicket = this.wxOpenConfigStorage.getComponentVerifyTicket(); | |||
Assert.assertEquals(componentVerifyTicket, "ComponentVerifyTicket"); | |||
} | |||
@Test | |||
public void testSetComponentVerifyTicket() { | |||
this.wxOpenConfigStorage.setComponentVerifyTicket("new ComponentVerifyTicket"); | |||
String componentVerifyTicket = this.wxOpenConfigStorage.getComponentVerifyTicket(); | |||
Assert.assertEquals(componentVerifyTicket, "new ComponentVerifyTicket"); | |||
} | |||
@Test | |||
public void testIsComponentAccessTokenExpired() { | |||
String responseContent = "{\"component_access_token\": \"new componentAccessToken\", \"expires_in\": 10000}"; | |||
WxOpenComponentAccessToken componentAccessToken = WxOpenComponentAccessToken.fromJson(responseContent); | |||
this.wxOpenConfigStorage.updateComponentAccessToken(componentAccessToken); | |||
boolean expired = this.wxOpenConfigStorage.isComponentAccessTokenExpired(); | |||
Assert.assertEquals(expired, false); | |||
this.wxOpenConfigStorage.expireComponentAccessToken(); | |||
expired = this.wxOpenConfigStorage.isComponentAccessTokenExpired(); | |||
Assert.assertEquals(expired, true); | |||
} | |||
@Test | |||
public void testGetAuthorizerRefreshToken() { | |||
String appid = "appid1"; | |||
this.wxOpenConfigStorage.setAuthorizerRefreshToken(appid, "AuthorizerRefreshToken 1"); | |||
String authorizerAccessToken = this.wxOpenConfigStorage.getAuthorizerRefreshToken(appid); | |||
Assert.assertEquals(authorizerAccessToken, "AuthorizerRefreshToken 1"); | |||
this.wxOpenConfigStorage.setAuthorizerRefreshToken(appid, "AuthorizerRefreshToken 2"); | |||
authorizerAccessToken = this.wxOpenConfigStorage.getAuthorizerRefreshToken(appid); | |||
Assert.assertEquals(authorizerAccessToken, "AuthorizerRefreshToken 2"); | |||
} | |||
@Test | |||
public void testGetAuthorizerAccessToken() { | |||
String appid = "appid1"; | |||
String responseContent = "{\"authorizer_access_token\": \"new authorizer_access_token\",\"expires_in\": 100000}"; | |||
WxOpenAuthorizerAccessToken wxOpenAuthorizerAccessToken = WxOpenAuthorizerAccessToken.fromJson(responseContent); | |||
this.wxOpenConfigStorage.updateAuthorizerAccessToken(appid, wxOpenAuthorizerAccessToken); | |||
String authorizerAccessToken = this.wxOpenConfigStorage.getAuthorizerAccessToken(appid); | |||
Assert.assertEquals(authorizerAccessToken, "new authorizer_access_token"); | |||
} | |||
@Test | |||
public void testIsAuthorizerAccessTokenExpired() { | |||
String appid = "appid1"; | |||
String responseContent = "{\"authorizer_access_token\": \"new authorizer_access_token\",\"expires_in\": 100000}"; | |||
WxOpenAuthorizerAccessToken wxOpenAuthorizerAccessToken = WxOpenAuthorizerAccessToken.fromJson(responseContent); | |||
this.wxOpenConfigStorage.updateAuthorizerAccessToken(appid, wxOpenAuthorizerAccessToken); | |||
String authorizerAccessToken = this.wxOpenConfigStorage.getAuthorizerAccessToken(appid); | |||
Assert.assertEquals(authorizerAccessToken, "new authorizer_access_token"); | |||
boolean expired = this.wxOpenConfigStorage.isAuthorizerAccessTokenExpired(appid); | |||
Assert.assertEquals(expired, false); | |||
this.wxOpenConfigStorage.expireAuthorizerAccessToken(appid); | |||
expired = this.wxOpenConfigStorage.isAuthorizerAccessTokenExpired(appid); | |||
Assert.assertEquals(expired, true); | |||
} | |||
@Test | |||
public void testGetJsapiTicket() { | |||
String appid = "appid1"; | |||
this.wxOpenConfigStorage.updateJsapiTicket(appid, "jsapiTicket", 100000); | |||
String jsapiTicket = this.wxOpenConfigStorage.getJsapiTicket(appid); | |||
Assert.assertEquals(jsapiTicket, "jsapiTicket"); | |||
boolean expired = this.wxOpenConfigStorage.isJsapiTicketExpired(appid); | |||
Assert.assertEquals(expired, false); | |||
this.wxOpenConfigStorage.expireJsapiTicket(appid); | |||
jsapiTicket = this.wxOpenConfigStorage.getJsapiTicket(appid); | |||
Assert.assertEquals(jsapiTicket, null); | |||
expired = this.wxOpenConfigStorage.isJsapiTicketExpired(appid); | |||
Assert.assertEquals(expired, true); | |||
} | |||
@Test | |||
public void testGetCardApiTicket() { | |||
String appid = "appid1"; | |||
this.wxOpenConfigStorage.updateCardApiTicket(appid, "new CardApiTicket", 10000); | |||
String cardApiTicket = this.wxOpenConfigStorage.getCardApiTicket(appid); | |||
Assert.assertEquals(cardApiTicket, "new CardApiTicket"); | |||
boolean expired = this.wxOpenConfigStorage.isCardApiTicketExpired(appid); | |||
Assert.assertEquals(expired, false); | |||
this.wxOpenConfigStorage.expireCardApiTicket(appid); | |||
expired = this.wxOpenConfigStorage.isCardApiTicketExpired(appid); | |||
Assert.assertEquals(expired, true); | |||
} | |||
} |