@@ -34,6 +34,7 @@ public interface WxOpenComponentService { | |||||
* 刷新oauth2的access token | * 刷新oauth2的access token | ||||
*/ | */ | ||||
String OAUTH2_REFRESH_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=%s&grant_type=refresh_token&refresh_token=%s&component_appid==%s"; | String OAUTH2_REFRESH_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=%s&grant_type=refresh_token&refresh_token=%s&component_appid==%s"; | ||||
WxMpService getWxMpServiceByAppid(String appid); | WxMpService getWxMpServiceByAppid(String appid); | ||||
WxOpenConfigStorage getWxOpenConfigStorage(); | WxOpenConfigStorage getWxOpenConfigStorage(); | ||||
@@ -9,29 +9,39 @@ import me.chanjar.weixin.open.bean.WxOpenComponentAccessToken; | |||||
*/ | */ | ||||
public interface WxOpenConfigStorage { | public interface WxOpenConfigStorage { | ||||
String getComponentAppId(); | |||||
void setComponentAppId(String componentAppId); | void setComponentAppId(String componentAppId); | ||||
String getComponentAppSecret(); | |||||
void setComponentAppSecret(String componentAppSecret); | void setComponentAppSecret(String componentAppSecret); | ||||
String getComponentToken(); | |||||
void setComponentToken(String componentToken); | void setComponentToken(String componentToken); | ||||
String getComponentAesKey(); | |||||
void setComponentAesKey(String componentAesKey); | void setComponentAesKey(String componentAesKey); | ||||
String getComponentAppId(); | |||||
String getComponentAppSecret(); | |||||
String getComponentToken(); | |||||
String getComponentAesKey(); | |||||
String getComponentVerifyTicket(); | String getComponentVerifyTicket(); | ||||
void setComponentVerifyTicket(String componentVerifyTicket); | void setComponentVerifyTicket(String componentVerifyTicket); | ||||
String getComponentAccessToken(); | String getComponentAccessToken(); | ||||
boolean isComponentAccessTokenExpired(); | boolean isComponentAccessTokenExpired(); | ||||
void updateComponentAccessTokent(WxOpenComponentAccessToken componentAccessToken); | void updateComponentAccessTokent(WxOpenComponentAccessToken componentAccessToken); | ||||
WxMpConfigStorage getWxMpConfigStorage(String appId); | WxMpConfigStorage getWxMpConfigStorage(String appId); | ||||
/** | /** | ||||
* 应该是线程安全的 | * 应该是线程安全的 | ||||
* | * | ||||
* @param componentAccessToken 新的accessToken值 | |||||
* @param expiresInSeconds 过期时间,以秒为单位 | |||||
* @param componentAccessToken 新的accessToken值 | |||||
* @param expiresInSeconds 过期时间,以秒为单位 | |||||
*/ | */ | ||||
void updateComponentAccessTokent(String componentAccessToken, int expiresInSeconds); | void updateComponentAccessTokent(String componentAccessToken, int expiresInSeconds); | ||||
@@ -42,7 +52,9 @@ public interface WxOpenConfigStorage { | |||||
String getAuthorizerRefreshToken(String appId); | String getAuthorizerRefreshToken(String appId); | ||||
void setAuthorizerRefreshToken(String appId, String authorizerRefreshToken); | void setAuthorizerRefreshToken(String appId, String authorizerRefreshToken); | ||||
String getAuthorizerAccessToken(String appId); | String getAuthorizerAccessToken(String appId); | ||||
@@ -63,8 +75,8 @@ public interface WxOpenConfigStorage { | |||||
/** | /** | ||||
* 应该是线程安全的 | * 应该是线程安全的 | ||||
* | * | ||||
* @param authorizerAccessToken 新的accessToken值 | |||||
* @param expiresInSeconds 过期时间,以秒为单位 | |||||
* @param authorizerAccessToken 新的accessToken值 | |||||
* @param expiresInSeconds 过期时间,以秒为单位 | |||||
*/ | */ | ||||
void updateAuthorizerAccessToken(String appId, String authorizerAccessToken, int expiresInSeconds); | void updateAuthorizerAccessToken(String appId, String authorizerAccessToken, int expiresInSeconds); | ||||
@@ -7,8 +7,11 @@ import me.chanjar.weixin.common.exception.WxErrorException; | |||||
*/ | */ | ||||
public interface WxOpenService { | public interface WxOpenService { | ||||
WxOpenComponentService getWxOpenComponentService(); | WxOpenComponentService getWxOpenComponentService(); | ||||
WxOpenConfigStorage getWxOpenConfigStorage(); | WxOpenConfigStorage getWxOpenConfigStorage(); | ||||
void setWxOpenConfigStorage(WxOpenConfigStorage wxOpenConfigStorage); | void setWxOpenConfigStorage(WxOpenConfigStorage wxOpenConfigStorage); | ||||
/** | /** | ||||
* 当本Service没有实现某个API的时候,可以用这个,针对所有微信API中的GET请求 | * 当本Service没有实现某个API的时候,可以用这个,针对所有微信API中的GET请求 | ||||
*/ | */ | ||||
@@ -30,9 +30,9 @@ import java.util.Map; | |||||
* @author <a href="https://github.com/007gzs">007</a> | * @author <a href="https://github.com/007gzs">007</a> | ||||
*/ | */ | ||||
public class WxOpenComponentServiceImpl implements WxOpenComponentService { | public class WxOpenComponentServiceImpl implements WxOpenComponentService { | ||||
private static final Map<String, WxMpService> wxOpenMpServiceMap = new Hashtable<>(); | |||||
protected final Logger log = LoggerFactory.getLogger(this.getClass()); | protected final Logger log = LoggerFactory.getLogger(this.getClass()); | ||||
private WxOpenService wxOpenService; | private WxOpenService wxOpenService; | ||||
private static final Map<String, WxMpService> wxOpenMpServiceMap = new Hashtable<>(); | |||||
public WxOpenComponentServiceImpl(WxOpenService wxOpenService) { | public WxOpenComponentServiceImpl(WxOpenService wxOpenService) { | ||||
this.wxOpenService = wxOpenService; | this.wxOpenService = wxOpenService; | ||||
@@ -62,6 +62,7 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService { | |||||
public WxOpenConfigStorage getWxOpenConfigStorage() { | public WxOpenConfigStorage getWxOpenConfigStorage() { | ||||
return wxOpenService.getWxOpenConfigStorage(); | return wxOpenService.getWxOpenConfigStorage(); | ||||
} | } | ||||
@Override | @Override | ||||
public boolean checkSignature(String timestamp, String nonce, String signature) { | public boolean checkSignature(String timestamp, String nonce, String signature) { | ||||
try { | try { | ||||
@@ -72,6 +73,7 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService { | |||||
return false; | return false; | ||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
public String getComponentAccessToken(boolean forceRefresh) throws WxErrorException { | public String getComponentAccessToken(boolean forceRefresh) throws WxErrorException { | ||||
@@ -137,6 +139,7 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService { | |||||
} | } | ||||
return null; | return null; | ||||
} | } | ||||
@Override | @Override | ||||
public WxOpenQueryAuthResult getQueryAuth(String authorizationCode) throws WxErrorException { | public WxOpenQueryAuthResult getQueryAuth(String authorizationCode) throws WxErrorException { | ||||
JsonObject jsonObject = new JsonObject(); | JsonObject jsonObject = new JsonObject(); | ||||
@@ -145,6 +148,7 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService { | |||||
String responseContent = post(API_QUERY_AUTH_URL, jsonObject.toString()); | String responseContent = post(API_QUERY_AUTH_URL, jsonObject.toString()); | ||||
return WxOpenGsonBuilder.create().fromJson(responseContent, WxOpenQueryAuthResult.class); | return WxOpenGsonBuilder.create().fromJson(responseContent, WxOpenQueryAuthResult.class); | ||||
} | } | ||||
@Override | @Override | ||||
public WxOpenAuthorizerInfoResult getAuthorizerInfo(String authorizerAppid) throws WxErrorException { | public WxOpenAuthorizerInfoResult getAuthorizerInfo(String authorizerAppid) throws WxErrorException { | ||||
JsonObject jsonObject = new JsonObject(); | JsonObject jsonObject = new JsonObject(); | ||||
@@ -163,6 +167,7 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService { | |||||
String responseContent = post(API_GET_AUTHORIZER_OPTION_URL, jsonObject.toString()); | String responseContent = post(API_GET_AUTHORIZER_OPTION_URL, jsonObject.toString()); | ||||
return WxOpenGsonBuilder.create().fromJson(responseContent, WxOpenAuthorizerOptionResult.class); | return WxOpenGsonBuilder.create().fromJson(responseContent, WxOpenAuthorizerOptionResult.class); | ||||
} | } | ||||
@Override | @Override | ||||
public WxError setAuthorizerOption(String authorizerAppid, String optionName, String optionValue) throws WxErrorException { | public WxError setAuthorizerOption(String authorizerAppid, String optionName, String optionValue) throws WxErrorException { | ||||
JsonObject jsonObject = new JsonObject(); | JsonObject jsonObject = new JsonObject(); | ||||
@@ -35,25 +35,13 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage { | |||||
private Map<String, Token> cardApiTickets = new Hashtable<>(); | private Map<String, Token> cardApiTickets = new Hashtable<>(); | ||||
@Override | @Override | ||||
public void setComponentAppId(String componentAppId) { | |||||
this.componentAppId = componentAppId; | |||||
} | |||||
@Override | |||||
public void setComponentAppSecret(String componentAppSecret) { | |||||
this.componentAppSecret = componentAppSecret; | |||||
} | |||||
@Override | |||||
public void setComponentToken(String componentToken) { | |||||
this.componentToken = componentToken; | |||||
} | |||||
@Override | |||||
public void setComponentAesKey(String componentAesKey) { | |||||
this.componentAesKey = componentAesKey; | |||||
public String getComponentAppId() { | |||||
return componentAppId; | |||||
} | } | ||||
@Override | @Override | ||||
public String getComponentAppId() { | |||||
return componentAppId; | |||||
public void setComponentAppId(String componentAppId) { | |||||
this.componentAppId = componentAppId; | |||||
} | } | ||||
@Override | @Override | ||||
@@ -61,16 +49,31 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage { | |||||
return componentAppSecret; | return componentAppSecret; | ||||
} | } | ||||
@Override | |||||
public void setComponentAppSecret(String componentAppSecret) { | |||||
this.componentAppSecret = componentAppSecret; | |||||
} | |||||
@Override | @Override | ||||
public String getComponentToken() { | public String getComponentToken() { | ||||
return componentToken; | return componentToken; | ||||
} | } | ||||
@Override | |||||
public void setComponentToken(String componentToken) { | |||||
this.componentToken = componentToken; | |||||
} | |||||
@Override | @Override | ||||
public String getComponentAesKey() { | public String getComponentAesKey() { | ||||
return componentAesKey; | return componentAesKey; | ||||
} | } | ||||
@Override | |||||
public void setComponentAesKey(String componentAesKey) { | |||||
this.componentAesKey = componentAesKey; | |||||
} | |||||
@Override | @Override | ||||
public String getComponentVerifyTicket() { | public String getComponentVerifyTicket() { | ||||
return componentVerifyTicket; | return componentVerifyTicket; | ||||
@@ -111,30 +114,34 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage { | |||||
public boolean autoRefreshToken() { | public boolean autoRefreshToken() { | ||||
return true; | return true; | ||||
} | } | ||||
private String getTokenString(Map<String, Token> map, String key){ | |||||
private String getTokenString(Map<String, Token> map, String key) { | |||||
Token token = map.get(key); | Token token = map.get(key); | ||||
if(token == null || (token.expiresTime != null && System.currentTimeMillis() > token.expiresTime)){ | |||||
if (token == null || (token.expiresTime != null && System.currentTimeMillis() > token.expiresTime)) { | |||||
return null; | return null; | ||||
} | } | ||||
return token.token; | return token.token; | ||||
} | } | ||||
private void expireToken(Map<String, Token> map, String key){ | |||||
private void expireToken(Map<String, Token> map, String key) { | |||||
Token token = map.get(key); | Token token = map.get(key); | ||||
if(token != null){ | |||||
if (token != null) { | |||||
token.expiresTime = 0L; | token.expiresTime = 0L; | ||||
} | } | ||||
} | } | ||||
private void updateToken(Map<String, Token> map, String key, String tokenString, Integer expiresInSeconds){ | |||||
private void updateToken(Map<String, Token> map, String key, String tokenString, Integer expiresInSeconds) { | |||||
Token token = map.get(key); | Token token = map.get(key); | ||||
if(token == null){ | |||||
if (token == null) { | |||||
token = new Token(); | token = new Token(); | ||||
map.put(key, token); | map.put(key, token); | ||||
} | } | ||||
token.token = tokenString; | token.token = tokenString; | ||||
if(expiresInSeconds != null) { | |||||
if (expiresInSeconds != null) { | |||||
token.expiresTime = System.currentTimeMillis() + (expiresInSeconds - 200) * 1000L; | token.expiresTime = System.currentTimeMillis() + (expiresInSeconds - 200) * 1000L; | ||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
public String getAuthorizerRefreshToken(String appId) { | public String getAuthorizerRefreshToken(String appId) { | ||||
return getTokenString(authorizerRefreshTokens, appId); | return getTokenString(authorizerRefreshTokens, appId); | ||||
@@ -211,22 +218,21 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage { | |||||
updateToken(cardApiTickets, appId, cardApiTicket, expiresInSeconds); | updateToken(cardApiTickets, appId, cardApiTicket, expiresInSeconds); | ||||
} | } | ||||
private static class Token{ | |||||
private static class Token { | |||||
private String token; | private String token; | ||||
private Long expiresTime; | private Long expiresTime; | ||||
} | } | ||||
private static class WxOpenMpConfigStorage implements WxMpConfigStorage{ | |||||
private static class WxOpenMpConfigStorage implements WxMpConfigStorage { | |||||
private WxOpenConfigStorage wxOpenConfigStorage; | private WxOpenConfigStorage wxOpenConfigStorage; | ||||
private String appId; | private String appId; | ||||
private WxOpenMpConfigStorage(WxOpenConfigStorage wxOpenConfigStorage, String appId){ | |||||
this.wxOpenConfigStorage = wxOpenConfigStorage; | |||||
this.appId = appId; | |||||
} | |||||
private Lock accessTokenLock = new ReentrantLock(); | private Lock accessTokenLock = new ReentrantLock(); | ||||
private Lock jsapiTicketLock = new ReentrantLock(); | private Lock jsapiTicketLock = new ReentrantLock(); | ||||
private Lock cardApiTicketLock = new ReentrantLock(); | private Lock cardApiTicketLock = new ReentrantLock(); | ||||
private WxOpenMpConfigStorage(WxOpenConfigStorage wxOpenConfigStorage, String appId) { | |||||
this.wxOpenConfigStorage = wxOpenConfigStorage; | |||||
this.appId = appId; | |||||
} | |||||
@Override | @Override | ||||
public String getAccessToken() { | public String getAccessToken() { | ||||
@@ -24,6 +24,7 @@ public class WxOpenInRedisConfigStorage extends WxOpenInMemoryConfigStorage { | |||||
private String authorizerAccessTokenKey; | private String authorizerAccessTokenKey; | ||||
private String jsapiTicketKey; | private String jsapiTicketKey; | ||||
private String cardApiTicket; | private String cardApiTicket; | ||||
public WxOpenInRedisConfigStorage(JedisPool jedisPool) { | public WxOpenInRedisConfigStorage(JedisPool jedisPool) { | ||||
this.jedisPool = jedisPool; | this.jedisPool = jedisPool; | ||||
} | } | ||||
@@ -38,54 +39,62 @@ public class WxOpenInRedisConfigStorage extends WxOpenInMemoryConfigStorage { | |||||
jsapiTicketKey = JSAPI_TICKET_KEY.concat(componentAppId); | jsapiTicketKey = JSAPI_TICKET_KEY.concat(componentAppId); | ||||
cardApiTicket = CARD_API_TICKET_KEY.concat(componentAppId); | cardApiTicket = CARD_API_TICKET_KEY.concat(componentAppId); | ||||
} | } | ||||
@Override | @Override | ||||
public String getComponentVerifyTicket(){ | |||||
try(Jedis jedis = jedisPool.getResource()){ | |||||
public String getComponentVerifyTicket() { | |||||
try (Jedis jedis = jedisPool.getResource()) { | |||||
return jedis.get(componentVerifyTicketKey); | return jedis.get(componentVerifyTicketKey); | ||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
public void setComponentVerifyTicket(String componentVerifyTicket){ | |||||
try(Jedis jedis = jedisPool.getResource()){ | |||||
public void setComponentVerifyTicket(String componentVerifyTicket) { | |||||
try (Jedis jedis = jedisPool.getResource()) { | |||||
jedis.set(componentVerifyTicketKey, componentVerifyTicket); | jedis.set(componentVerifyTicketKey, componentVerifyTicket); | ||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
public String getComponentAccessToken(){ | |||||
try(Jedis jedis = jedisPool.getResource()){ | |||||
public String getComponentAccessToken() { | |||||
try (Jedis jedis = jedisPool.getResource()) { | |||||
return jedis.get(componentAccessTokenKey); | return jedis.get(componentAccessTokenKey); | ||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
public boolean isComponentAccessTokenExpired(){ | |||||
try(Jedis jedis = jedisPool.getResource()){ | |||||
public boolean isComponentAccessTokenExpired() { | |||||
try (Jedis jedis = jedisPool.getResource()) { | |||||
return jedis.ttl(componentAccessTokenKey) < 2; | return jedis.ttl(componentAccessTokenKey) < 2; | ||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
public void updateComponentAccessTokent(String componentAccessToken, int expiresInSeconds){ | |||||
public void updateComponentAccessTokent(String componentAccessToken, int expiresInSeconds) { | |||||
try (Jedis jedis = this.jedisPool.getResource()) { | try (Jedis jedis = this.jedisPool.getResource()) { | ||||
jedis.setex(componentAccessTokenKey, expiresInSeconds - 200, componentAccessToken); | jedis.setex(componentAccessTokenKey, expiresInSeconds - 200, componentAccessToken); | ||||
} | } | ||||
} | } | ||||
private String getKey(String prefix, String appId){ | |||||
private String getKey(String prefix, String appId) { | |||||
return prefix.endsWith(":") ? prefix.concat(appId) : prefix.concat(":").concat(appId); | return prefix.endsWith(":") ? prefix.concat(appId) : prefix.concat(":").concat(appId); | ||||
} | } | ||||
@Override | @Override | ||||
public String getAuthorizerRefreshToken(String appId){ | |||||
public String getAuthorizerRefreshToken(String appId) { | |||||
try (Jedis jedis = this.jedisPool.getResource()) { | try (Jedis jedis = this.jedisPool.getResource()) { | ||||
return jedis.get(getKey(authorizerRefreshTokenKey, appId)); | return jedis.get(getKey(authorizerRefreshTokenKey, appId)); | ||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
public void setAuthorizerRefreshToken(String appId, String authorizerRefreshToken){ | |||||
public void setAuthorizerRefreshToken(String appId, String authorizerRefreshToken) { | |||||
try (Jedis jedis = this.jedisPool.getResource()) { | try (Jedis jedis = this.jedisPool.getResource()) { | ||||
jedis.set(getKey(authorizerRefreshTokenKey, appId), authorizerRefreshToken); | jedis.set(getKey(authorizerRefreshTokenKey, appId), authorizerRefreshToken); | ||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
public String getAuthorizerAccessToken(String appId){ | |||||
public String getAuthorizerAccessToken(String appId) { | |||||
try (Jedis jedis = this.jedisPool.getResource()) { | try (Jedis jedis = this.jedisPool.getResource()) { | ||||
return jedis.get(getKey(authorizerAccessTokenKey, appId)); | return jedis.get(getKey(authorizerAccessTokenKey, appId)); | ||||
} | } | ||||
@@ -93,70 +102,77 @@ public class WxOpenInRedisConfigStorage extends WxOpenInMemoryConfigStorage { | |||||
@Override | @Override | ||||
public boolean isAuthorizerAccessTokenExpired(String appId){ | |||||
public boolean isAuthorizerAccessTokenExpired(String appId) { | |||||
try (Jedis jedis = this.jedisPool.getResource()) { | try (Jedis jedis = this.jedisPool.getResource()) { | ||||
return jedis.ttl(getKey(authorizerAccessTokenKey, appId)) < 2; | return jedis.ttl(getKey(authorizerAccessTokenKey, appId)) < 2; | ||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
public void expireAuthorizerAccessToken(String appId){ | |||||
public void expireAuthorizerAccessToken(String appId) { | |||||
try (Jedis jedis = this.jedisPool.getResource()) { | try (Jedis jedis = this.jedisPool.getResource()) { | ||||
jedis.expire(getKey(authorizerAccessTokenKey, appId), 0); | jedis.expire(getKey(authorizerAccessTokenKey, appId), 0); | ||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
public void updateAuthorizerAccessToken(String appId, String authorizerAccessToken, int expiresInSeconds){ | |||||
public void updateAuthorizerAccessToken(String appId, String authorizerAccessToken, int expiresInSeconds) { | |||||
try (Jedis jedis = this.jedisPool.getResource()) { | try (Jedis jedis = this.jedisPool.getResource()) { | ||||
jedis.setex(getKey(authorizerAccessTokenKey, appId), expiresInSeconds - 200, authorizerAccessToken); | jedis.setex(getKey(authorizerAccessTokenKey, appId), expiresInSeconds - 200, authorizerAccessToken); | ||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
public String getJsapiTicket(String appId){ | |||||
public String getJsapiTicket(String appId) { | |||||
try (Jedis jedis = this.jedisPool.getResource()) { | try (Jedis jedis = this.jedisPool.getResource()) { | ||||
return jedis.get(getKey(jsapiTicketKey, appId)); | return jedis.get(getKey(jsapiTicketKey, appId)); | ||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
public boolean isJsapiTicketExpired(String appId){ | |||||
public boolean isJsapiTicketExpired(String appId) { | |||||
try (Jedis jedis = this.jedisPool.getResource()) { | try (Jedis jedis = this.jedisPool.getResource()) { | ||||
return jedis.ttl(getKey(jsapiTicketKey, appId)) < 2; | return jedis.ttl(getKey(jsapiTicketKey, appId)) < 2; | ||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
public void expireJsapiTicket(String appId){ | |||||
public void expireJsapiTicket(String appId) { | |||||
try (Jedis jedis = this.jedisPool.getResource()) { | try (Jedis jedis = this.jedisPool.getResource()) { | ||||
jedis.expire(getKey(jsapiTicketKey, appId), 0); | jedis.expire(getKey(jsapiTicketKey, appId), 0); | ||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
public void updateJsapiTicket(String appId, String jsapiTicket, int expiresInSeconds){ | |||||
public void updateJsapiTicket(String appId, String jsapiTicket, int expiresInSeconds) { | |||||
try (Jedis jedis = this.jedisPool.getResource()) { | try (Jedis jedis = this.jedisPool.getResource()) { | ||||
jedis.setex(getKey(jsapiTicketKey, appId), expiresInSeconds - 200, jsapiTicket); | jedis.setex(getKey(jsapiTicketKey, appId), expiresInSeconds - 200, jsapiTicket); | ||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
public String getCardApiTicket(String appId){ | |||||
public String getCardApiTicket(String appId) { | |||||
try (Jedis jedis = this.jedisPool.getResource()) { | try (Jedis jedis = this.jedisPool.getResource()) { | ||||
return jedis.get(getKey(jsapiTicketKey, appId)); | return jedis.get(getKey(jsapiTicketKey, appId)); | ||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
public boolean isCardApiTicketExpired(String appId){ | |||||
public boolean isCardApiTicketExpired(String appId) { | |||||
try (Jedis jedis = this.jedisPool.getResource()) { | try (Jedis jedis = this.jedisPool.getResource()) { | ||||
return jedis.ttl(getKey(cardApiTicket, appId)) < 2; | return jedis.ttl(getKey(cardApiTicket, appId)) < 2; | ||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
public void expireCardApiTicket(String appId){ | |||||
public void expireCardApiTicket(String appId) { | |||||
try (Jedis jedis = this.jedisPool.getResource()) { | try (Jedis jedis = this.jedisPool.getResource()) { | ||||
jedis.expire(getKey(cardApiTicket, appId), 0); | jedis.expire(getKey(cardApiTicket, appId), 0); | ||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
public void updateCardApiTicket(String appId, String cardApiTicket, int expiresInSeconds){ | |||||
public void updateCardApiTicket(String appId, String cardApiTicket, int expiresInSeconds) { | |||||
try (Jedis jedis = this.jedisPool.getResource()) { | try (Jedis jedis = this.jedisPool.getResource()) { | ||||
jedis.setex(getKey(cardApiTicket, appId), expiresInSeconds - 200, cardApiTicket); | jedis.setex(getKey(cardApiTicket, appId), expiresInSeconds - 200, cardApiTicket); | ||||
} | } | ||||
@@ -13,15 +13,18 @@ public class WxOpenMpServiceImpl extends WxMpServiceImpl { | |||||
private WxOpenComponentService wxOpenComponentService; | private WxOpenComponentService wxOpenComponentService; | ||||
private WxMpConfigStorage wxMpConfigStorage; | private WxMpConfigStorage wxMpConfigStorage; | ||||
private String appId; | private String appId; | ||||
public WxOpenMpServiceImpl(WxOpenComponentService wxOpenComponentService, String appId, WxMpConfigStorage wxMpConfigStorage){ | |||||
public WxOpenMpServiceImpl(WxOpenComponentService wxOpenComponentService, String appId, WxMpConfigStorage wxMpConfigStorage) { | |||||
this.wxOpenComponentService = wxOpenComponentService; | this.wxOpenComponentService = wxOpenComponentService; | ||||
this.appId = appId; | this.appId = appId; | ||||
this.wxMpConfigStorage = wxMpConfigStorage; | this.wxMpConfigStorage = wxMpConfigStorage; | ||||
} | } | ||||
@Override | @Override | ||||
public WxMpConfigStorage getWxMpConfigStorage(){ | |||||
public WxMpConfigStorage getWxMpConfigStorage() { | |||||
return wxMpConfigStorage; | return wxMpConfigStorage; | ||||
} | } | ||||
@Override | @Override | ||||
public String getAccessToken(boolean forceRefresh) throws WxErrorException { | public String getAccessToken(boolean forceRefresh) throws WxErrorException { | ||||
return wxOpenComponentService.getAuthorizerAccessToken(appId, forceRefresh); | return wxOpenComponentService.getAuthorizerAccessToken(appId, forceRefresh); | ||||
@@ -17,17 +17,20 @@ import java.io.IOException; | |||||
*/ | */ | ||||
public abstract class WxOpenServiceAbstractImpl<H, P> implements WxOpenService, RequestHttp<H, P> { | public abstract class WxOpenServiceAbstractImpl<H, P> implements WxOpenService, RequestHttp<H, P> { | ||||
protected final Logger log = LoggerFactory.getLogger(this.getClass()); | protected final Logger log = LoggerFactory.getLogger(this.getClass()); | ||||
private WxOpenConfigStorage wxOpenConfigStorage; | |||||
protected WxOpenComponentService wxOpenComponentService = new WxOpenComponentServiceImpl(this); | protected WxOpenComponentService wxOpenComponentService = new WxOpenComponentServiceImpl(this); | ||||
private WxOpenConfigStorage wxOpenConfigStorage; | |||||
@Override | @Override | ||||
public WxOpenComponentService getWxOpenComponentService() { | public WxOpenComponentService getWxOpenComponentService() { | ||||
return wxOpenComponentService; | return wxOpenComponentService; | ||||
} | } | ||||
@Override | @Override | ||||
public WxOpenConfigStorage getWxOpenConfigStorage(){ | |||||
public WxOpenConfigStorage getWxOpenConfigStorage() { | |||||
return wxOpenConfigStorage; | return wxOpenConfigStorage; | ||||
} | } | ||||
public void setWxOpenConfigStorage(WxOpenConfigStorage wxOpenConfigStorage){ | |||||
public void setWxOpenConfigStorage(WxOpenConfigStorage wxOpenConfigStorage) { | |||||
this.wxOpenConfigStorage = wxOpenConfigStorage; | this.wxOpenConfigStorage = wxOpenConfigStorage; | ||||
} | } | ||||
@@ -10,9 +10,10 @@ import org.apache.http.impl.client.CloseableHttpClient; | |||||
/** | /** | ||||
* apache-http方式实现 | * apache-http方式实现 | ||||
* | |||||
* @author <a href="https://github.com/007gzs">007</a> | * @author <a href="https://github.com/007gzs">007</a> | ||||
*/ | */ | ||||
public class WxOpenServiceApacheHttpClientImpl extends WxOpenServiceAbstractImpl<CloseableHttpClient, HttpHost> { | |||||
public class WxOpenServiceApacheHttpClientImpl extends WxOpenServiceAbstractImpl<CloseableHttpClient, HttpHost> { | |||||
private CloseableHttpClient httpClient = DefaultApacheHttpClientBuilder.get().build(); | private CloseableHttpClient httpClient = DefaultApacheHttpClientBuilder.get().build(); | ||||
private HttpHost httpProxy = null; | private HttpHost httpProxy = null; | ||||
@@ -7,7 +7,8 @@ import java.io.Serializable; | |||||
/** | /** | ||||
* @author <a href="https://github.com/007gzs">007</a> | * @author <a href="https://github.com/007gzs">007</a> | ||||
*/ | */ | ||||
public class WxOpenAuthorizerAccessToken implements Serializable{ | |||||
public class WxOpenAuthorizerAccessToken implements Serializable { | |||||
private static final long serialVersionUID = -4069745419280727420L; | |||||
private String authorizerAccessToken; | private String authorizerAccessToken; | ||||
@@ -7,7 +7,8 @@ import java.io.Serializable; | |||||
/** | /** | ||||
* @author <a href="https://github.com/007gzs">007</a> | * @author <a href="https://github.com/007gzs">007</a> | ||||
*/ | */ | ||||
public class WxOpenComponentAccessToken implements Serializable{ | |||||
public class WxOpenComponentAccessToken implements Serializable { | |||||
private static final long serialVersionUID = 2134550135400443725L; | |||||
private String componentAccessToken; | private String componentAccessToken; | ||||
@@ -9,7 +9,9 @@ import java.util.List; | |||||
* @author <a href="https://github.com/007gzs">007</a> | * @author <a href="https://github.com/007gzs">007</a> | ||||
*/ | */ | ||||
@Data | @Data | ||||
public class WxOpenAuthorizationInfo implements Serializable{ | |||||
public class WxOpenAuthorizationInfo implements Serializable { | |||||
private static final long serialVersionUID = -8713680081354754208L; | |||||
private String authorizerAppid; | private String authorizerAppid; | ||||
private String authorizerAccessToken; | private String authorizerAccessToken; | ||||
private int expiresIn; | private int expiresIn; | ||||
@@ -9,7 +9,9 @@ import java.util.Map; | |||||
* @author <a href="https://github.com/007gzs">007</a> | * @author <a href="https://github.com/007gzs">007</a> | ||||
*/ | */ | ||||
@Data | @Data | ||||
public class WxOpenAuthorizerInfo implements Serializable{ | |||||
public class WxOpenAuthorizerInfo implements Serializable { | |||||
private static final long serialVersionUID = -5327886953416394738L; | |||||
private String nickName; | private String nickName; | ||||
private String headImg; | private String headImg; | ||||
private Integer serviceTypeInfo; | private Integer serviceTypeInfo; | ||||
@@ -19,7 +19,9 @@ import java.io.Serializable; | |||||
*/ | */ | ||||
@XStreamAlias("xml") | @XStreamAlias("xml") | ||||
@Data | @Data | ||||
public class WxOpenXmlMessage implements Serializable{ | |||||
public class WxOpenXmlMessage implements Serializable { | |||||
private static final long serialVersionUID = -5641769554709507771L; | |||||
@XStreamAlias("AppId") | @XStreamAlias("AppId") | ||||
@XStreamConverter(value = XStreamCDataConverter.class) | @XStreamConverter(value = XStreamCDataConverter.class) | ||||
private String appId; | private String appId; | ||||
@@ -78,6 +80,7 @@ public class WxOpenXmlMessage implements Serializable{ | |||||
encryptedXml); | encryptedXml); | ||||
return fromXml(plainText); | return fromXml(plainText); | ||||
} | } | ||||
public static WxMpXmlMessage fromEncryptedMpXml(String encryptedXml, | public static WxMpXmlMessage fromEncryptedMpXml(String encryptedXml, | ||||
WxOpenConfigStorage wxOpenConfigStorage, String timestamp, String nonce, | WxOpenConfigStorage wxOpenConfigStorage, String timestamp, String nonce, | ||||
String msgSignature) { | String msgSignature) { | ||||
@@ -89,7 +92,7 @@ public class WxOpenXmlMessage implements Serializable{ | |||||
public static WxOpenXmlMessage fromEncryptedXml(InputStream is, | public static WxOpenXmlMessage fromEncryptedXml(InputStream is, | ||||
WxOpenConfigStorage wxOpenConfigStorage, String timestamp, String nonce, | WxOpenConfigStorage wxOpenConfigStorage, String timestamp, String nonce, | ||||
String msgSignature) { | |||||
String msgSignature) { | |||||
try { | try { | ||||
return fromEncryptedXml(IOUtils.toString(is, "UTF-8"), wxOpenConfigStorage, | return fromEncryptedXml(IOUtils.toString(is, "UTF-8"), wxOpenConfigStorage, | ||||
timestamp, nonce, msgSignature); | timestamp, nonce, msgSignature); | ||||
@@ -10,7 +10,9 @@ import java.io.Serializable; | |||||
* @author <a href="https://github.com/007gzs">007</a> | * @author <a href="https://github.com/007gzs">007</a> | ||||
*/ | */ | ||||
@Data | @Data | ||||
public class WxOpenAuthorizerInfoResult implements Serializable{ | |||||
public class WxOpenAuthorizerInfoResult implements Serializable { | |||||
private static final long serialVersionUID = 3166298050833019785L; | |||||
private WxOpenAuthorizationInfo authorizationInfo; | private WxOpenAuthorizationInfo authorizationInfo; | ||||
private WxOpenAuthorizerInfo authorizerInfo; | private WxOpenAuthorizerInfo authorizerInfo; | ||||
} | } |
@@ -8,7 +8,9 @@ import java.io.Serializable; | |||||
* @author <a href="https://github.com/007gzs">007</a> | * @author <a href="https://github.com/007gzs">007</a> | ||||
*/ | */ | ||||
@Data | @Data | ||||
public class WxOpenAuthorizerOptionResult implements Serializable{ | |||||
public class WxOpenAuthorizerOptionResult implements Serializable { | |||||
private static final long serialVersionUID = 4477837353654658179L; | |||||
String authorizerAppid; | String authorizerAppid; | ||||
String optionName; | String optionName; | ||||
String optionValue; | String optionValue; | ||||
@@ -9,6 +9,8 @@ import java.io.Serializable; | |||||
* @author <a href="https://github.com/007gzs">007</a> | * @author <a href="https://github.com/007gzs">007</a> | ||||
*/ | */ | ||||
@Data | @Data | ||||
public class WxOpenQueryAuthResult implements Serializable{ | |||||
public class WxOpenQueryAuthResult implements Serializable { | |||||
private static final long serialVersionUID = 2394736235020206855L; | |||||
private WxOpenAuthorizationInfo authorizationInfo; | private WxOpenAuthorizationInfo authorizationInfo; | ||||
} | } |
@@ -2,6 +2,7 @@ package me.chanjar.weixin.open.util; | |||||
import me.chanjar.weixin.open.api.WxOpenConfigStorage; | import me.chanjar.weixin.open.api.WxOpenConfigStorage; | ||||
import org.apache.commons.codec.binary.Base64; | import org.apache.commons.codec.binary.Base64; | ||||
/** | /** | ||||
* @author <a href="https://github.com/007gzs">007</a> | * @author <a href="https://github.com/007gzs">007</a> | ||||
*/ | */ | ||||
@@ -22,18 +22,18 @@ public class WxOpenAuthorizationInfoGsonAdapter implements JsonDeserializer<WxOp | |||||
authorizationInfo.setAuthorizerRefreshToken(GsonHelper.getString(jsonObject, "authorizer_refresh_token")); | authorizationInfo.setAuthorizerRefreshToken(GsonHelper.getString(jsonObject, "authorizer_refresh_token")); | ||||
List<Integer> funcInfo = new ArrayList<>(); | List<Integer> funcInfo = new ArrayList<>(); | ||||
JsonArray jsonArray = GsonHelper.getAsJsonArray(jsonObject.get("func_info")); | JsonArray jsonArray = GsonHelper.getAsJsonArray(jsonObject.get("func_info")); | ||||
if(jsonArray != null && !jsonArray.isJsonNull()){ | |||||
for(int i = 0; i < jsonArray.size(); i++){ | |||||
if (jsonArray != null && !jsonArray.isJsonNull()) { | |||||
for (int i = 0; i < jsonArray.size(); i++) { | |||||
jsonObject = jsonArray.get(i).getAsJsonObject(); | jsonObject = jsonArray.get(i).getAsJsonObject(); | ||||
if(jsonObject == null || jsonObject.isJsonNull()){ | |||||
if (jsonObject == null || jsonObject.isJsonNull()) { | |||||
continue; | continue; | ||||
} | } | ||||
jsonObject = jsonObject.getAsJsonObject("funcscope_category"); | jsonObject = jsonObject.getAsJsonObject("funcscope_category"); | ||||
if(jsonObject == null || jsonObject.isJsonNull()){ | |||||
if (jsonObject == null || jsonObject.isJsonNull()) { | |||||
continue; | continue; | ||||
} | } | ||||
Integer id = GsonHelper.getInteger(jsonObject, "id"); | Integer id = GsonHelper.getInteger(jsonObject, "id"); | ||||
if(id == null) { | |||||
if (id == null) { | |||||
continue; | continue; | ||||
} | } | ||||
funcInfo.add(id); | funcInfo.add(id); | ||||
@@ -23,10 +23,10 @@ public class WxOpenAuthorizerInfoGsonAdapter implements JsonDeserializer<WxOpenA | |||||
authorizationInfo.setPrincipalName(GsonHelper.getString(jsonObject, "principal_name")); | authorizationInfo.setPrincipalName(GsonHelper.getString(jsonObject, "principal_name")); | ||||
authorizationInfo.setAlias(GsonHelper.getString(jsonObject, "alias")); | authorizationInfo.setAlias(GsonHelper.getString(jsonObject, "alias")); | ||||
authorizationInfo.setQrcodeUrl(GsonHelper.getString(jsonObject, "qrcode_url")); | authorizationInfo.setQrcodeUrl(GsonHelper.getString(jsonObject, "qrcode_url")); | ||||
if(jsonObject.has("service_type_info")) { | |||||
if (jsonObject.has("service_type_info")) { | |||||
authorizationInfo.setServiceTypeInfo(GsonHelper.getInteger(jsonObject.getAsJsonObject("service_type_info"), "id")); | authorizationInfo.setServiceTypeInfo(GsonHelper.getInteger(jsonObject.getAsJsonObject("service_type_info"), "id")); | ||||
} | } | ||||
if(jsonObject.has("verify_type_info")) { | |||||
if (jsonObject.has("verify_type_info")) { | |||||
authorizationInfo.setVerifyTypeInfo(GsonHelper.getInteger(jsonObject.getAsJsonObject("verify_type_info"), "id")); | authorizationInfo.setVerifyTypeInfo(GsonHelper.getInteger(jsonObject.getAsJsonObject("verify_type_info"), "id")); | ||||
} | } | ||||
Map<String, Integer> businessInfo = WxOpenGsonBuilder.create().fromJson(jsonObject.get("business_info"), | Map<String, Integer> businessInfo = WxOpenGsonBuilder.create().fromJson(jsonObject.get("business_info"), | ||||