🎨 优化重构部分代码,抽取公共常量

This commit is contained in:
Binary Wang
2020-08-23 17:02:39 +08:00
parent 817b474dd0
commit 6d996f20b9
6 changed files with 29 additions and 57 deletions

View File

@@ -1,14 +1,30 @@
package me.chanjar.weixin.common.api; package me.chanjar.weixin.common.api;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import static me.chanjar.weixin.common.error.WxMpErrorMsgEnum.*;
/** /**
* 微信开发所使用到的常量类. * 微信开发所使用到的常量类.
* *
* @author Daniel Qian & binarywang * @author Daniel Qian & binarywang
*/ */
public class WxConsts { public class WxConsts {
/**
* access_token 相关错误代码
* <pre>
* 发生以下情况时尝试刷新access_token
* 40001 获取access_token时AppSecret错误或者access_token无效
* 42001 access_token超时
* 40014 不合法的access_token请开发者认真比对access_token的有效性如是否过期或查看是否正在为恰当的公众号调用接口
* </pre>
*/
public static final List<Integer> ACCESS_TOKEN_ERROR_CODES = Arrays.asList(CODE_40001.getCode(),
CODE_40014.getCode(), CODE_42001.getCode());
/** /**
* 微信推送过来的消息的类型和发送给微信xml格式消息的消息类型. * 微信推送过来的消息的类型和发送给微信xml格式消息的消息类型.
*/ */

View File

@@ -4,8 +4,9 @@ import com.google.common.base.Joiner;
import com.google.gson.JsonArray; import com.google.gson.JsonArray;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.enums.WxType; import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.bean.WxJsapiSignature; import me.chanjar.weixin.common.bean.WxJsapiSignature;
import me.chanjar.weixin.common.enums.WxType;
import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxError;
import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.session.StandardSessionManager; import me.chanjar.weixin.common.session.StandardSessionManager;
@@ -277,13 +278,8 @@ public abstract class BaseWxCpServiceImpl<H, P> implements WxCpService, RequestH
return result; return result;
} catch (WxErrorException e) { } catch (WxErrorException e) {
WxError error = e.getError(); WxError error = e.getError();
/*
* 发生以下情况时尝试刷新access_token if (WxConsts.ACCESS_TOKEN_ERROR_CODES.contains(error.getErrorCode())) {
* 40001 获取access_token时AppSecret错误或者access_token无效
* 42001 access_token超时
* 40014 不合法的access_token请开发者认真比对access_token的有效性如是否过期或查看是否正在为恰当的公众号调用接口
*/
if (error.getErrorCode() == 42001 || error.getErrorCode() == 40001 || error.getErrorCode() == 40014) {
// 强制设置wxCpConfigStorage它的access token过期了这样在下一次请求里就会刷新access token // 强制设置wxCpConfigStorage它的access token过期了这样在下一次请求里就会刷新access token
this.configStorage.expireAccessToken(); this.configStorage.expireAccessToken();
if (this.getWxCpConfigStorage().autoRefreshToken()) { if (this.getWxCpConfigStorage().autoRefreshToken()) {

View File

@@ -10,6 +10,7 @@ import com.google.common.collect.Maps;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.api.WxImgProcService; import me.chanjar.weixin.common.api.WxImgProcService;
import me.chanjar.weixin.common.api.WxOcrService; import me.chanjar.weixin.common.api.WxOcrService;
import me.chanjar.weixin.common.bean.WxAccessToken; import me.chanjar.weixin.common.bean.WxAccessToken;
@@ -32,8 +33,6 @@ import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Lock;
import static cn.binarywang.wx.miniapp.constant.WxMaConstants.ErrorCode.*;
/** /**
* @author <a href="https://github.com/binarywang">Binary Wang</a> * @author <a href="https://github.com/binarywang">Binary Wang</a>
* @see #doGetAccessTokenRequest * @see #doGetAccessTokenRequest
@@ -169,8 +168,8 @@ public abstract class BaseWxMaServiceImpl<H, P> implements WxMaService, RequestH
/** /**
* 通过网络请求获取AccessToken * 通过网络请求获取AccessToken
* *
* @return * @return .
* @throws IOException * @throws IOException .
*/ */
protected abstract String doGetAccessTokenRequest() throws IOException; protected abstract String doGetAccessTokenRequest() throws IOException;
@@ -244,12 +243,7 @@ public abstract class BaseWxMaServiceImpl<H, P> implements WxMaService, RequestH
return result; return result;
} catch (WxErrorException e) { } catch (WxErrorException e) {
WxError error = e.getError(); WxError error = e.getError();
/* if (WxConsts.ACCESS_TOKEN_ERROR_CODES.contains(error.getErrorCode())) {
* 发生以下情况时尝试刷新access_token
*/
if (error.getErrorCode() == ERR_40001
|| error.getErrorCode() == ERR_42001
|| error.getErrorCode() == ERR_40014) {
// 强制设置WxMaConfig的access token过期了这样在下一次请求里就会刷新access token // 强制设置WxMaConfig的access token过期了这样在下一次请求里就会刷新access token
Lock lock = this.getWxMaConfig().getAccessTokenLock(); Lock lock = this.getWxMaConfig().getAccessTokenLock();
lock.lock(); lock.lock();

View File

@@ -53,23 +53,6 @@ public class WxMaConstants {
public static final String MA_PAGE = "miniprogrampage"; public static final String MA_PAGE = "miniprogrampage";
} }
public static final class ErrorCode {
/**
* 40001 获取access_token时AppSecret错误或者access_token无效.
*/
public static final int ERR_40001 = 40001;
/**
* 42001 access_token超时.
*/
public static final int ERR_42001 = 42001;
/**
* 40014 不合法的access_token请开发者认真比对access_token的有效性如是否过期.
*/
public static final int ERR_40014 = 40014;
}
/** /**
* 内容安全检测的媒体类型 * 内容安全检测的媒体类型
*/ */

View File

@@ -7,6 +7,7 @@ import com.google.gson.JsonObject;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.api.WxImgProcService; import me.chanjar.weixin.common.api.WxImgProcService;
import me.chanjar.weixin.common.api.WxOcrService; import me.chanjar.weixin.common.api.WxOcrService;
import me.chanjar.weixin.common.bean.WxAccessToken; import me.chanjar.weixin.common.bean.WxAccessToken;
@@ -377,13 +378,7 @@ public abstract class BaseWxMpServiceImpl<H, P> implements WxMpService, RequestH
return result; return result;
} catch (WxErrorException e) { } catch (WxErrorException e) {
WxError error = e.getError(); WxError error = e.getError();
/* if (WxConsts.ACCESS_TOKEN_ERROR_CODES.contains(error.getErrorCode())) {
* 发生以下情况时尝试刷新access_token
* 40001 获取 access_token 时 AppSecret 错误,或者 access_token 无效。请开发者认真比对 AppSecret 的正确性,或查看是否正在为恰当的公众号调用接口
* 42001 access_token 超时,请检查 access_token 的有效期,请参考基础支持 - 获取 access_token 中,对 access_token 的详细机制说明
* 40014 不合法的 access_token ,请开发者认真比对 access_token 的有效性(如是否过期),或查看是否正在为恰当的公众号调用接口
*/
if (error.getErrorCode() == 42001 || error.getErrorCode() == 40001 || error.getErrorCode() == 40014) {
// 强制设置wxMpConfigStorage它的access token过期了这样在下一次请求里就会刷新access token // 强制设置wxMpConfigStorage它的access token过期了这样在下一次请求里就会刷新access token
Lock lock = this.getWxMpConfigStorage().getAccessTokenLock(); Lock lock = this.getWxMpConfigStorage().getAccessTokenLock();
lock.lock(); lock.lock();

View File

@@ -146,14 +146,8 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService {
return getWxOpenService().post(uriWithComponentAccessToken, postData); return getWxOpenService().post(uriWithComponentAccessToken, postData);
} catch (WxErrorException e) { } catch (WxErrorException e) {
WxError error = e.getError(); WxError error = e.getError();
/* if (WxConsts.ACCESS_TOKEN_ERROR_CODES.contains(error.getErrorCode())) {
* 发生以下情况时尝试刷新access_token // 强制设置access token过期这样在下一次请求里就会刷新access token
* 40001 获取access_token时AppSecret错误或者access_token无效
* 42001 access_token超时
* 40014 不合法的access_token请开发者认真比对access_token的有效性如是否过期或查看是否正在为恰当的公众号调用接口
*/
if (error.getErrorCode() == 42001 || error.getErrorCode() == 40001 || error.getErrorCode() == 40014) {
// 强制设置wxMpConfigStorage它的access token过期了这样在下一次请求里就会刷新access token
Lock lock = this.getWxOpenConfigStorage().getComponentAccessTokenLock(); Lock lock = this.getWxOpenConfigStorage().getComponentAccessTokenLock();
lock.lock(); lock.lock();
try { try {
@@ -190,13 +184,7 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService {
return getWxOpenService().get(uriWithComponentAccessToken, null); return getWxOpenService().get(uriWithComponentAccessToken, null);
} catch (WxErrorException e) { } catch (WxErrorException e) {
WxError error = e.getError(); WxError error = e.getError();
/* if (WxConsts.ACCESS_TOKEN_ERROR_CODES.contains(error.getErrorCode())) {
* 发生以下情况时尝试刷新access_token
* 40001 获取access_token时AppSecret错误或者access_token无效
* 42001 access_token超时
* 40014 不合法的access_token请开发者认真比对access_token的有效性如是否过期或查看是否正在为恰当的公众号调用接口
*/
if (error.getErrorCode() == 42001 || error.getErrorCode() == 40001 || error.getErrorCode() == 40014) {
// 强制设置wxMpConfigStorage它的access token过期了这样在下一次请求里就会刷新access token // 强制设置wxMpConfigStorage它的access token过期了这样在下一次请求里就会刷新access token
Lock lock = this.getWxOpenConfigStorage().getComponentAccessTokenLock(); Lock lock = this.getWxOpenConfigStorage().getComponentAccessTokenLock();
lock.lock(); lock.lock();