From f3f69a845c3b33e4498909012d9c2a4a3bdb1458 Mon Sep 17 00:00:00 2001 From: "shuo.wang" Date: Fri, 1 Nov 2024 18:12:16 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E5=BE=AE=E4=BF=A1getUserPhoneNumber?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/enums/ErrorCodeEnum.java | 1 + .../java/com/cool/store/http/WechatRest.java | 21 ++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java index b3bc9caaf..bd3bf577f 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java @@ -33,6 +33,7 @@ public enum ErrorCodeEnum { */ TOKEN_ERROR(2000001,"请求异常,与当前登录企业不匹配",null), FAIL(400000, "FAIL", null), + WX_ACCESS_TOKEN_INVALID(400001, "WX_Invalid token", null), ACCESS_TOKEN_INVALID(400005, "Invalid token", null), PARAMS_VALIDATE_ERROR(400003, "参数校验失败!", null), LOGIN_ERROR(400004, "登录失败", null), diff --git a/coolstore-partner-service/src/main/java/com/cool/store/http/WechatRest.java b/coolstore-partner-service/src/main/java/com/cool/store/http/WechatRest.java index 5160cf538..ce7a492c8 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/http/WechatRest.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/http/WechatRest.java @@ -11,6 +11,7 @@ import com.cool.store.mq.util.HttpRestTemplateService; import com.cool.store.utils.RedisUtilPool; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -31,6 +32,10 @@ public class WechatRest { @Resource private HttpRestTemplateService httpRestTemplateService; + @Value("${weixin.appId}") + private String wxAppId; + @Value("${weixin.appSecret}") + private String wxAppSecret; /** * 小程序Token 地址 @@ -97,10 +102,24 @@ public class WechatRest { responseStr = httpRestTemplateService.postForObject(reqUrl, requestMap, String.class); log.info("WechatRest#getUserPhoneNumber, reqUrl:{}, response:{}", reqUrl, responseStr); if(StringUtils.isNotBlank(responseStr)){ - return JSONObject.parseObject(responseStr, PhoneInfoDTO.class); + PhoneInfoDTO phoneInfoDTO = JSONObject.parseObject(responseStr, PhoneInfoDTO.class); + if (phoneInfoDTO != null && "40001".equals(phoneInfoDTO.getErrCode())) { + throw new ServiceException(ErrorCodeEnum.WX_ACCESS_TOKEN_INVALID); + } + return phoneInfoDTO; } } catch (Exception e) { log.error("获取手机号异常", e); + log.info("重新获取微信token"); + String cacheAccessToken = "wechat_mini_" + wxAppId; + redisUtilPool.delKey(cacheAccessToken); + String newAccessToken = getAccessToken(wxAppId, wxAppSecret); + reqUrl = String.format(GET_USERPHONENUMBER, newAccessToken); + responseStr = httpRestTemplateService.postForObject(reqUrl, requestMap, String.class); + log.info("WechatRest#newGetUserPhoneNumber, reqUrl:{}, response:{}", reqUrl, responseStr); + if (StringUtils.isNotBlank(responseStr)) { + return JSONObject.parseObject(responseStr, PhoneInfoDTO.class); + } } return null; }