格式化开放平台模块代码

This commit is contained in:
Binary Wang
2017-11-14 11:07:31 +08:00
parent 993999735b
commit e00e7bb0ca
20 changed files with 152 additions and 86 deletions

View File

@@ -34,6 +34,7 @@ public interface WxOpenComponentService {
* 刷新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";
WxMpService getWxMpServiceByAppid(String appid);
WxOpenConfigStorage getWxOpenConfigStorage();

View File

@@ -9,29 +9,39 @@ import me.chanjar.weixin.open.bean.WxOpenComponentAccessToken;
*/
public interface WxOpenConfigStorage {
String getComponentAppId();
void setComponentAppId(String componentAppId);
String getComponentAppSecret();
void setComponentAppSecret(String componentAppSecret);
String getComponentToken();
void setComponentToken(String componentToken);
String getComponentAesKey();
void setComponentAesKey(String componentAesKey);
String getComponentAppId();
String getComponentAppSecret();
String getComponentToken();
String getComponentAesKey();
String getComponentVerifyTicket();
void setComponentVerifyTicket(String componentVerifyTicket);
String getComponentAccessToken();
boolean isComponentAccessTokenExpired();
void updateComponentAccessTokent(WxOpenComponentAccessToken componentAccessToken);
WxMpConfigStorage getWxMpConfigStorage(String appId);
/**
* 应该是线程安全的
*
* @param componentAccessToken 新的accessToken值
* @param expiresInSeconds 过期时间,以秒为单位
* @param componentAccessToken 新的accessToken值
* @param expiresInSeconds 过期时间,以秒为单位
*/
void updateComponentAccessTokent(String componentAccessToken, int expiresInSeconds);
@@ -42,7 +52,9 @@ public interface WxOpenConfigStorage {
String getAuthorizerRefreshToken(String appId);
void setAuthorizerRefreshToken(String appId, String authorizerRefreshToken);
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);

View File

@@ -7,8 +7,11 @@ import me.chanjar.weixin.common.exception.WxErrorException;
*/
public interface WxOpenService {
WxOpenComponentService getWxOpenComponentService();
WxOpenConfigStorage getWxOpenConfigStorage();
void setWxOpenConfigStorage(WxOpenConfigStorage wxOpenConfigStorage);
/**
* 当本Service没有实现某个API的时候可以用这个针对所有微信API中的GET请求
*/

View File

@@ -30,9 +30,9 @@ import java.util.Map;
* @author <a href="https://github.com/007gzs">007</a>
*/
public class WxOpenComponentServiceImpl implements WxOpenComponentService {
private static final Map<String, WxMpService> wxOpenMpServiceMap = new Hashtable<>();
protected final Logger log = LoggerFactory.getLogger(this.getClass());
private WxOpenService wxOpenService;
private static final Map<String, WxMpService> wxOpenMpServiceMap = new Hashtable<>();
public WxOpenComponentServiceImpl(WxOpenService wxOpenService) {
this.wxOpenService = wxOpenService;
@@ -62,6 +62,7 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService {
public WxOpenConfigStorage getWxOpenConfigStorage() {
return wxOpenService.getWxOpenConfigStorage();
}
@Override
public boolean checkSignature(String timestamp, String nonce, String signature) {
try {
@@ -72,6 +73,7 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService {
return false;
}
}
@Override
public String getComponentAccessToken(boolean forceRefresh) throws WxErrorException {
@@ -137,6 +139,7 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService {
}
return null;
}
@Override
public WxOpenQueryAuthResult getQueryAuth(String authorizationCode) throws WxErrorException {
JsonObject jsonObject = new JsonObject();
@@ -145,6 +148,7 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService {
String responseContent = post(API_QUERY_AUTH_URL, jsonObject.toString());
return WxOpenGsonBuilder.create().fromJson(responseContent, WxOpenQueryAuthResult.class);
}
@Override
public WxOpenAuthorizerInfoResult getAuthorizerInfo(String authorizerAppid) throws WxErrorException {
JsonObject jsonObject = new JsonObject();
@@ -163,6 +167,7 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService {
String responseContent = post(API_GET_AUTHORIZER_OPTION_URL, jsonObject.toString());
return WxOpenGsonBuilder.create().fromJson(responseContent, WxOpenAuthorizerOptionResult.class);
}
@Override
public WxError setAuthorizerOption(String authorizerAppid, String optionName, String optionValue) throws WxErrorException {
JsonObject jsonObject = new JsonObject();

View File

@@ -35,25 +35,13 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage {
private Map<String, Token> cardApiTickets = new Hashtable<>();
@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
public String getComponentAppId() {
return componentAppId;
public void setComponentAppId(String componentAppId) {
this.componentAppId = componentAppId;
}
@Override
@@ -61,16 +49,31 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage {
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;
@@ -111,30 +114,34 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage {
public boolean autoRefreshToken() {
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);
if(token == null || (token.expiresTime != null && System.currentTimeMillis() > token.expiresTime)){
if (token == null || (token.expiresTime != null && System.currentTimeMillis() > token.expiresTime)) {
return null;
}
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);
if(token != null){
if (token != null) {
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);
if(token == null){
if (token == null) {
token = new Token();
map.put(key, token);
}
token.token = tokenString;
if(expiresInSeconds != null) {
if (expiresInSeconds != null) {
token.expiresTime = System.currentTimeMillis() + (expiresInSeconds - 200) * 1000L;
}
}
@Override
public String getAuthorizerRefreshToken(String appId) {
return getTokenString(authorizerRefreshTokens, appId);
@@ -211,22 +218,21 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage {
updateToken(cardApiTickets, appId, cardApiTicket, expiresInSeconds);
}
private static class Token{
private static class Token {
private String token;
private Long expiresTime;
}
private static class WxOpenMpConfigStorage implements WxMpConfigStorage{
private static class WxOpenMpConfigStorage implements WxMpConfigStorage {
private WxOpenConfigStorage wxOpenConfigStorage;
private String appId;
private WxOpenMpConfigStorage(WxOpenConfigStorage wxOpenConfigStorage, String appId){
this.wxOpenConfigStorage = wxOpenConfigStorage;
this.appId = appId;
}
private Lock accessTokenLock = new ReentrantLock();
private Lock jsapiTicketLock = new ReentrantLock();
private Lock cardApiTicketLock = new ReentrantLock();
private WxOpenMpConfigStorage(WxOpenConfigStorage wxOpenConfigStorage, String appId) {
this.wxOpenConfigStorage = wxOpenConfigStorage;
this.appId = appId;
}
@Override
public String getAccessToken() {

View File

@@ -24,6 +24,7 @@ public class WxOpenInRedisConfigStorage extends WxOpenInMemoryConfigStorage {
private String authorizerAccessTokenKey;
private String jsapiTicketKey;
private String cardApiTicket;
public WxOpenInRedisConfigStorage(JedisPool jedisPool) {
this.jedisPool = jedisPool;
}
@@ -38,54 +39,62 @@ public class WxOpenInRedisConfigStorage extends WxOpenInMemoryConfigStorage {
jsapiTicketKey = JSAPI_TICKET_KEY.concat(componentAppId);
cardApiTicket = CARD_API_TICKET_KEY.concat(componentAppId);
}
@Override
public String getComponentVerifyTicket(){
try(Jedis jedis = jedisPool.getResource()){
public String getComponentVerifyTicket() {
try (Jedis jedis = jedisPool.getResource()) {
return jedis.get(componentVerifyTicketKey);
}
}
@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);
}
}
@Override
public String getComponentAccessToken(){
try(Jedis jedis = jedisPool.getResource()){
public String getComponentAccessToken() {
try (Jedis jedis = jedisPool.getResource()) {
return jedis.get(componentAccessTokenKey);
}
}
@Override
public boolean isComponentAccessTokenExpired(){
try(Jedis jedis = jedisPool.getResource()){
public boolean isComponentAccessTokenExpired() {
try (Jedis jedis = jedisPool.getResource()) {
return jedis.ttl(componentAccessTokenKey) < 2;
}
}
@Override
public void updateComponentAccessTokent(String componentAccessToken, int expiresInSeconds){
public void updateComponentAccessTokent(String componentAccessToken, int expiresInSeconds) {
try (Jedis jedis = this.jedisPool.getResource()) {
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);
}
@Override
public String getAuthorizerRefreshToken(String appId){
public String getAuthorizerRefreshToken(String appId) {
try (Jedis jedis = this.jedisPool.getResource()) {
return jedis.get(getKey(authorizerRefreshTokenKey, appId));
}
}
@Override
public void setAuthorizerRefreshToken(String appId, String authorizerRefreshToken){
public void setAuthorizerRefreshToken(String appId, String authorizerRefreshToken) {
try (Jedis jedis = this.jedisPool.getResource()) {
jedis.set(getKey(authorizerRefreshTokenKey, appId), authorizerRefreshToken);
}
}
@Override
public String getAuthorizerAccessToken(String appId){
public String getAuthorizerAccessToken(String appId) {
try (Jedis jedis = this.jedisPool.getResource()) {
return jedis.get(getKey(authorizerAccessTokenKey, appId));
}
@@ -93,70 +102,77 @@ public class WxOpenInRedisConfigStorage extends WxOpenInMemoryConfigStorage {
@Override
public boolean isAuthorizerAccessTokenExpired(String appId){
public boolean isAuthorizerAccessTokenExpired(String appId) {
try (Jedis jedis = this.jedisPool.getResource()) {
return jedis.ttl(getKey(authorizerAccessTokenKey, appId)) < 2;
}
}
@Override
public void expireAuthorizerAccessToken(String appId){
public void expireAuthorizerAccessToken(String appId) {
try (Jedis jedis = this.jedisPool.getResource()) {
jedis.expire(getKey(authorizerAccessTokenKey, appId), 0);
}
}
@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()) {
jedis.setex(getKey(authorizerAccessTokenKey, appId), expiresInSeconds - 200, authorizerAccessToken);
}
}
@Override
public String getJsapiTicket(String appId){
public String getJsapiTicket(String appId) {
try (Jedis jedis = this.jedisPool.getResource()) {
return jedis.get(getKey(jsapiTicketKey, appId));
}
}
@Override
public boolean isJsapiTicketExpired(String appId){
public boolean isJsapiTicketExpired(String appId) {
try (Jedis jedis = this.jedisPool.getResource()) {
return jedis.ttl(getKey(jsapiTicketKey, appId)) < 2;
}
}
@Override
public void expireJsapiTicket(String appId){
public void expireJsapiTicket(String appId) {
try (Jedis jedis = this.jedisPool.getResource()) {
jedis.expire(getKey(jsapiTicketKey, appId), 0);
}
}
@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()) {
jedis.setex(getKey(jsapiTicketKey, appId), expiresInSeconds - 200, jsapiTicket);
}
}
@Override
public String getCardApiTicket(String appId){
public String getCardApiTicket(String appId) {
try (Jedis jedis = this.jedisPool.getResource()) {
return jedis.get(getKey(jsapiTicketKey, appId));
}
}
@Override
public boolean isCardApiTicketExpired(String appId){
public boolean isCardApiTicketExpired(String appId) {
try (Jedis jedis = this.jedisPool.getResource()) {
return jedis.ttl(getKey(cardApiTicket, appId)) < 2;
}
}
@Override
public void expireCardApiTicket(String appId){
public void expireCardApiTicket(String appId) {
try (Jedis jedis = this.jedisPool.getResource()) {
jedis.expire(getKey(cardApiTicket, appId), 0);
}
}
@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()) {
jedis.setex(getKey(cardApiTicket, appId), expiresInSeconds - 200, cardApiTicket);
}

View File

@@ -13,15 +13,18 @@ public class WxOpenMpServiceImpl extends WxMpServiceImpl {
private WxOpenComponentService wxOpenComponentService;
private WxMpConfigStorage wxMpConfigStorage;
private String appId;
public WxOpenMpServiceImpl(WxOpenComponentService wxOpenComponentService, String appId, WxMpConfigStorage wxMpConfigStorage){
public WxOpenMpServiceImpl(WxOpenComponentService wxOpenComponentService, String appId, WxMpConfigStorage wxMpConfigStorage) {
this.wxOpenComponentService = wxOpenComponentService;
this.appId = appId;
this.wxMpConfigStorage = wxMpConfigStorage;
}
@Override
public WxMpConfigStorage getWxMpConfigStorage(){
public WxMpConfigStorage getWxMpConfigStorage() {
return wxMpConfigStorage;
}
@Override
public String getAccessToken(boolean forceRefresh) throws WxErrorException {
return wxOpenComponentService.getAuthorizerAccessToken(appId, forceRefresh);

View File

@@ -17,17 +17,20 @@ import java.io.IOException;
*/
public abstract class WxOpenServiceAbstractImpl<H, P> implements WxOpenService, RequestHttp<H, P> {
protected final Logger log = LoggerFactory.getLogger(this.getClass());
private WxOpenConfigStorage wxOpenConfigStorage;
protected WxOpenComponentService wxOpenComponentService = new WxOpenComponentServiceImpl(this);
private WxOpenConfigStorage wxOpenConfigStorage;
@Override
public WxOpenComponentService getWxOpenComponentService() {
return wxOpenComponentService;
}
@Override
public WxOpenConfigStorage getWxOpenConfigStorage(){
public WxOpenConfigStorage getWxOpenConfigStorage() {
return wxOpenConfigStorage;
}
public void setWxOpenConfigStorage(WxOpenConfigStorage wxOpenConfigStorage){
public void setWxOpenConfigStorage(WxOpenConfigStorage wxOpenConfigStorage) {
this.wxOpenConfigStorage = wxOpenConfigStorage;
}

View File

@@ -10,9 +10,10 @@ import org.apache.http.impl.client.CloseableHttpClient;
/**
* apache-http方式实现
*
* @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 HttpHost httpProxy = null;

View File

@@ -7,7 +7,8 @@ import java.io.Serializable;
/**
* @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;

View File

@@ -7,7 +7,8 @@ import java.io.Serializable;
/**
* @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;

View File

@@ -9,7 +9,9 @@ import java.util.List;
* @author <a href="https://github.com/007gzs">007</a>
*/
@Data
public class WxOpenAuthorizationInfo implements Serializable{
public class WxOpenAuthorizationInfo implements Serializable {
private static final long serialVersionUID = -8713680081354754208L;
private String authorizerAppid;
private String authorizerAccessToken;
private int expiresIn;

View File

@@ -9,7 +9,9 @@ import java.util.Map;
* @author <a href="https://github.com/007gzs">007</a>
*/
@Data
public class WxOpenAuthorizerInfo implements Serializable{
public class WxOpenAuthorizerInfo implements Serializable {
private static final long serialVersionUID = -5327886953416394738L;
private String nickName;
private String headImg;
private Integer serviceTypeInfo;

View File

@@ -19,7 +19,9 @@ import java.io.Serializable;
*/
@XStreamAlias("xml")
@Data
public class WxOpenXmlMessage implements Serializable{
public class WxOpenXmlMessage implements Serializable {
private static final long serialVersionUID = -5641769554709507771L;
@XStreamAlias("AppId")
@XStreamConverter(value = XStreamCDataConverter.class)
private String appId;
@@ -78,6 +80,7 @@ public class WxOpenXmlMessage implements Serializable{
encryptedXml);
return fromXml(plainText);
}
public static WxMpXmlMessage fromEncryptedMpXml(String encryptedXml,
WxOpenConfigStorage wxOpenConfigStorage, String timestamp, String nonce,
String msgSignature) {
@@ -89,7 +92,7 @@ public class WxOpenXmlMessage implements Serializable{
public static WxOpenXmlMessage fromEncryptedXml(InputStream is,
WxOpenConfigStorage wxOpenConfigStorage, String timestamp, String nonce,
String msgSignature) {
String msgSignature) {
try {
return fromEncryptedXml(IOUtils.toString(is, "UTF-8"), wxOpenConfigStorage,
timestamp, nonce, msgSignature);

View File

@@ -10,7 +10,9 @@ import java.io.Serializable;
* @author <a href="https://github.com/007gzs">007</a>
*/
@Data
public class WxOpenAuthorizerInfoResult implements Serializable{
public class WxOpenAuthorizerInfoResult implements Serializable {
private static final long serialVersionUID = 3166298050833019785L;
private WxOpenAuthorizationInfo authorizationInfo;
private WxOpenAuthorizerInfo authorizerInfo;
}

View File

@@ -8,7 +8,9 @@ import java.io.Serializable;
* @author <a href="https://github.com/007gzs">007</a>
*/
@Data
public class WxOpenAuthorizerOptionResult implements Serializable{
public class WxOpenAuthorizerOptionResult implements Serializable {
private static final long serialVersionUID = 4477837353654658179L;
String authorizerAppid;
String optionName;
String optionValue;

View File

@@ -9,6 +9,8 @@ import java.io.Serializable;
* @author <a href="https://github.com/007gzs">007</a>
*/
@Data
public class WxOpenQueryAuthResult implements Serializable{
public class WxOpenQueryAuthResult implements Serializable {
private static final long serialVersionUID = 2394736235020206855L;
private WxOpenAuthorizationInfo authorizationInfo;
}

View File

@@ -2,6 +2,7 @@ package me.chanjar.weixin.open.util;
import me.chanjar.weixin.open.api.WxOpenConfigStorage;
import org.apache.commons.codec.binary.Base64;
/**
* @author <a href="https://github.com/007gzs">007</a>
*/

View File

@@ -22,18 +22,18 @@ public class WxOpenAuthorizationInfoGsonAdapter implements JsonDeserializer<WxOp
authorizationInfo.setAuthorizerRefreshToken(GsonHelper.getString(jsonObject, "authorizer_refresh_token"));
List<Integer> funcInfo = new ArrayList<>();
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();
if(jsonObject == null || jsonObject.isJsonNull()){
if (jsonObject == null || jsonObject.isJsonNull()) {
continue;
}
jsonObject = jsonObject.getAsJsonObject("funcscope_category");
if(jsonObject == null || jsonObject.isJsonNull()){
if (jsonObject == null || jsonObject.isJsonNull()) {
continue;
}
Integer id = GsonHelper.getInteger(jsonObject, "id");
if(id == null) {
if (id == null) {
continue;
}
funcInfo.add(id);

View File

@@ -23,10 +23,10 @@ public class WxOpenAuthorizerInfoGsonAdapter implements JsonDeserializer<WxOpenA
authorizationInfo.setPrincipalName(GsonHelper.getString(jsonObject, "principal_name"));
authorizationInfo.setAlias(GsonHelper.getString(jsonObject, "alias"));
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"));
}
if(jsonObject.has("verify_type_info")) {
if (jsonObject.has("verify_type_info")) {
authorizationInfo.setVerifyTypeInfo(GsonHelper.getInteger(jsonObject.getAsJsonObject("verify_type_info"), "id"));
}
Map<String, Integer> businessInfo = WxOpenGsonBuilder.create().fromJson(jsonObject.get("business_info"),