From 6d996f20b995b269ecb2a9f7d013db9767613b2c Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Sun, 23 Aug 2020 17:02:39 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E4=BC=98=E5=8C=96=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E9=83=A8=E5=88=86=E4=BB=A3=E7=A0=81=EF=BC=8C=E6=8A=BD=E5=8F=96?= =?UTF-8?q?=E5=85=AC=E5=85=B1=E5=B8=B8=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/chanjar/weixin/common/api/WxConsts.java | 16 ++++++++++++++++ .../cp/api/impl/BaseWxCpServiceImpl.java | 12 ++++-------- .../miniapp/api/impl/BaseWxMaServiceImpl.java | 14 ++++---------- .../wx/miniapp/constant/WxMaConstants.java | 17 ----------------- .../mp/api/impl/BaseWxMpServiceImpl.java | 9 ++------- .../api/impl/WxOpenComponentServiceImpl.java | 18 +++--------------- 6 files changed, 29 insertions(+), 57 deletions(-) diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java index 2ba0f9321..99acd4f86 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java @@ -1,14 +1,30 @@ package me.chanjar.weixin.common.api; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; +import static me.chanjar.weixin.common.error.WxMpErrorMsgEnum.*; + /** * 微信开发所使用到的常量类. * * @author Daniel Qian & binarywang */ public class WxConsts { + /** + * access_token 相关错误代码 + *
+   * 发生以下情况时尝试刷新access_token
+   * 40001 获取access_token时AppSecret错误,或者access_token无效
+   * 42001 access_token超时
+   * 40014 不合法的access_token,请开发者认真比对access_token的有效性(如是否过期),或查看是否正在为恰当的公众号调用接口
+   * 
+ */ + public static final List ACCESS_TOKEN_ERROR_CODES = Arrays.asList(CODE_40001.getCode(), + CODE_40014.getCode(), CODE_42001.getCode()); + /** * 微信推送过来的消息的类型,和发送给微信xml格式消息的消息类型. */ diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java index f2d96cf5c..fec21eee7 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java @@ -4,8 +4,9 @@ import com.google.common.base.Joiner; import com.google.gson.JsonArray; import com.google.gson.JsonObject; 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.enums.WxType; import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.session.StandardSessionManager; @@ -277,13 +278,8 @@ public abstract class BaseWxCpServiceImpl implements WxCpService, RequestH return result; } catch (WxErrorException e) { WxError error = e.getError(); - /* - * 发生以下情况时尝试刷新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) { + + if (WxConsts.ACCESS_TOKEN_ERROR_CODES.contains(error.getErrorCode())) { // 强制设置wxCpConfigStorage它的access token过期了,这样在下一次请求里就会刷新access token this.configStorage.expireAccessToken(); if (this.getWxCpConfigStorage().autoRefreshToken()) { diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java index 2b1cb6669..576174dbf 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java @@ -10,6 +10,7 @@ import com.google.common.collect.Maps; import com.google.gson.Gson; import com.google.gson.JsonObject; 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.WxOcrService; import me.chanjar.weixin.common.bean.WxAccessToken; @@ -32,8 +33,6 @@ import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; -import static cn.binarywang.wx.miniapp.constant.WxMaConstants.ErrorCode.*; - /** * @author Binary Wang * @see #doGetAccessTokenRequest @@ -169,8 +168,8 @@ public abstract class BaseWxMaServiceImpl implements WxMaService, RequestH /** * 通过网络请求获取AccessToken * - * @return - * @throws IOException + * @return . + * @throws IOException . */ protected abstract String doGetAccessTokenRequest() throws IOException; @@ -244,12 +243,7 @@ public abstract class BaseWxMaServiceImpl implements WxMaService, RequestH return result; } catch (WxErrorException e) { WxError error = e.getError(); - /* - * 发生以下情况时尝试刷新access_token - */ - if (error.getErrorCode() == ERR_40001 - || error.getErrorCode() == ERR_42001 - || error.getErrorCode() == ERR_40014) { + if (WxConsts.ACCESS_TOKEN_ERROR_CODES.contains(error.getErrorCode())) { // 强制设置WxMaConfig的access token过期了,这样在下一次请求里就会刷新access token Lock lock = this.getWxMaConfig().getAccessTokenLock(); lock.lock(); diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaConstants.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaConstants.java index 0d2a8675e..2ca92d084 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaConstants.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaConstants.java @@ -53,23 +53,6 @@ public class WxMaConstants { 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; - } - /** * 内容安全检测的媒体类型 */ diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java index ee861e076..7b8a3a8ad 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java @@ -7,6 +7,7 @@ import com.google.gson.JsonObject; import lombok.Getter; import lombok.Setter; 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.WxOcrService; import me.chanjar.weixin.common.bean.WxAccessToken; @@ -377,13 +378,7 @@ public abstract class BaseWxMpServiceImpl implements WxMpService, RequestH return result; } catch (WxErrorException e) { WxError error = e.getError(); - /* - * 发生以下情况时尝试刷新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) { + if (WxConsts.ACCESS_TOKEN_ERROR_CODES.contains(error.getErrorCode())) { // 强制设置wxMpConfigStorage它的access token过期了,这样在下一次请求里就会刷新access token Lock lock = this.getWxMpConfigStorage().getAccessTokenLock(); lock.lock(); diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImpl.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImpl.java index 80961921f..10e5b2786 100644 --- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImpl.java +++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImpl.java @@ -146,14 +146,8 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService { return getWxOpenService().post(uriWithComponentAccessToken, postData); } catch (WxErrorException e) { WxError error = e.getError(); - /* - * 发生以下情况时尝试刷新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 + if (WxConsts.ACCESS_TOKEN_ERROR_CODES.contains(error.getErrorCode())) { + // 强制设置access token过期,这样在下一次请求里就会刷新access token Lock lock = this.getWxOpenConfigStorage().getComponentAccessTokenLock(); lock.lock(); try { @@ -190,13 +184,7 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService { return getWxOpenService().get(uriWithComponentAccessToken, null); } catch (WxErrorException e) { WxError error = e.getError(); - /* - * 发生以下情况时尝试刷新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) { + if (WxConsts.ACCESS_TOKEN_ERROR_CODES.contains(error.getErrorCode())) { // 强制设置wxMpConfigStorage它的access token过期了,这样在下一次请求里就会刷新access token Lock lock = this.getWxOpenConfigStorage().getComponentAccessTokenLock(); lock.lock();