فهرست منبع

小程序获取手机号码,acctoken失效重试

lyhzzz 2 سال پیش
والد
کامیت
4d9ad65260

+ 1 - 7
src/main/java/com/fdkankan/tk/controller/WxApiController.java

@@ -42,7 +42,7 @@ public class WxApiController extends BaseController{
 
     @GetMapping("/getPhone")
     public ResultData getPhone(@RequestParam(required = false) String code){
-        return ResultData.ok(wxUserService.getPhone(code));
+        return ResultData.ok(wxUserService.getPhone(code,0));
     }
 
     @PostMapping("/updateUser")
@@ -64,12 +64,6 @@ public class WxApiController extends BaseController{
      */
     @GetMapping("/delUser")
     public ResultData delUser(@RequestParam(required = false) String wxUserId){
-        WxConfig wxConfig = wxConfigService.getWxConfig();
-        if(wxConfig == null){
-            throw new BusinessException(ResultCode.WX_CONFIG_ERROR);
-        }
-        String redisKey = RedisKeyUtil.AccessToken + wxConfig.getAppId();
-        redisUtil.del(redisKey);
 
         wxUserService.removeById(wxUserId);
         return ResultData.ok();

+ 2 - 0
src/main/java/com/fdkankan/tk/service/IWxService.java

@@ -7,5 +7,7 @@ public interface IWxService {
 
     String getToken();
 
+    void delToken();
+
     void getWxQRCode(String path, String targetTmpPath,Integer reCount);
 }

+ 1 - 1
src/main/java/com/fdkankan/tk/service/IWxUserService.java

@@ -23,7 +23,7 @@ public interface IWxUserService extends IService<WxUser> {
 
     void updateByVo(WxUserVo param);
 
-    Object getPhone(String code);
+    Object getPhone(String code,Integer reCount);
 
     Object userInfo(String token);
 }

+ 11 - 2
src/main/java/com/fdkankan/tk/service/impl/WxServiceImpl.java

@@ -81,6 +81,16 @@ public class WxServiceImpl implements IWxService {
         return null;
     }
 
+    @Override
+    public void delToken() {
+        WxConfig wxConfig = wxConfigService.getWxConfig();
+        if(wxConfig == null){
+            throw new BusinessException(ResultCode.WX_CONFIG_ERROR);
+        }
+        String redisKey = RedisKeyUtil.AccessToken + wxConfig.getAppId();
+        redisUtil.del(redisKey);
+    }
+
     //生成分享二维码
     @Override
     public void getWxQRCode(String path, String targetTmpPath,Integer reCount)  {
@@ -108,8 +118,7 @@ public class WxServiceImpl implements IWxService {
                     int errcode = jsonObject.getInteger("errcode");
                     if(errcode == 40001) {
                         log.info("token过期了");
-                        String redisKey = RedisKeyUtil.AccessToken + wxConfig.getAppId();
-                        redisUtil.del(redisKey);
+                        this.delToken();
                         getWxQRCode(path, targetTmpPath,reCount);
                     }
                 }

+ 9 - 1
src/main/java/com/fdkankan/tk/service/impl/WxUserServiceImpl.java

@@ -27,6 +27,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.security.spec.ECField;
 import java.util.Date;
+import java.util.HashMap;
 
 /**
  * <p>
@@ -103,14 +104,21 @@ public class WxUserServiceImpl extends ServiceImpl<IWxUserMapper, WxUser> implem
         this.updateById(wxUser);
     }
 
+    static  HashMap<String,Integer> reCount = new HashMap<>();
+
     @Override
-    public Object getPhone(String code) {
+    public Object getPhone(String code,Integer reCount) {
         try {
             String token = wxService.getToken();
             if(StringUtils.isBlank(token)){
                 throw new BusinessException(ResultCode.WX_PHONE_ERROR);
             }
             JSONObject jsonObject = wxClient.getPhone(token, new WxGetPhoneParam(code));
+            if(jsonObject.getInteger("errcode") != null && jsonObject.getInteger("errcode") == 40001 && reCount < 2){
+                reCount ++;
+                wxService.delToken();
+                return getPhone(code,reCount);
+            }
             JSONObject phoneObj = (JSONObject) jsonObject.get("phone_info");
             if(phoneObj==null){
                 throw new BusinessException(ResultCode.WX_PHONE_ERROR);