Browse Source

三方平台bug

lijilei 3 years ago
parent
commit
015bf6ec31

+ 3 - 3
book-push/src/main/java/com/book/push/Application.java

@@ -17,8 +17,8 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 public class Application {
 public class Application {
     public static void main(String[] args) {
     public static void main(String[] args) {
         SpringApplication.run(Application.class);
         SpringApplication.run(Application.class);
-        System.out.println("----------------------------------------------------------------------------------");
-        System.out.println("--------              application book-push run success                 ----------");
-        System.out.println("----------------------------------------------------------------------------------");
+        System.out.println("---------------------------------------------------------------------------------------------------------------");
+        System.out.println("----------------     -         application book-push run success                 ---------------------------");
+        System.out.println("------------------------------------------------------------------------------------------------------------");
     }
     }
 }
 }

+ 165 - 13
book-push/src/main/java/com/book/push/config/WxOpenInRedisBookConfigStorage.java

@@ -1,6 +1,9 @@
 package com.book.push.config;
 package com.book.push.config;
 
 
+import com.book.dao.cps.pojo.AdminConfig;
 import com.book.dao.cps.pojo.Platform;
 import com.book.dao.cps.pojo.Platform;
+import com.book.push.service.dao.AdminConfigService;
+import com.book.push.service.redis.RedisService;
 import com.book.push.service.wx.WxThirdPartService;
 import com.book.push.service.wx.WxThirdPartService;
 import com.book.push.utils.JsonUtils;
 import com.book.push.utils.JsonUtils;
 import com.book.push.utils.Md5Util;
 import com.book.push.utils.Md5Util;
@@ -9,26 +12,37 @@ import com.book.push.vo.ComponentInfo;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.NonNull;
 import lombok.NonNull;
 import lombok.Setter;
 import lombok.Setter;
+import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.open.api.impl.WxOpenInRedisConfigStorage;
 import me.chanjar.weixin.open.api.impl.WxOpenInRedisConfigStorage;
+import org.apache.commons.lang3.StringUtils;
 import redis.clients.jedis.Jedis;
 import redis.clients.jedis.Jedis;
 import redis.clients.jedis.util.Pool;
 import redis.clients.jedis.util.Pool;
 
 
+import java.util.List;
+
 /**
 /**
  * created in 2021/8/25
  * created in 2021/8/25
  * Project: book-store
  * Project: book-store
  *
  *
  * @author win7
  * @author win7
  */
  */
-
+@Slf4j
 public class WxOpenInRedisBookConfigStorage extends WxOpenInRedisConfigStorage {
 public class WxOpenInRedisBookConfigStorage extends WxOpenInRedisConfigStorage {
     @Getter
     @Getter
     @Setter
     @Setter
     private Platform platform;
     private Platform platform;
+    @Getter
+    @Setter
+    private RedisService redisService;
+    @Getter
+    @Setter
+    private AdminConfigService adminConfigService;
 
 
     public WxOpenInRedisBookConfigStorage(@NonNull Pool<Jedis> jedisPool, String keyPrefix) {
     public WxOpenInRedisBookConfigStorage(@NonNull Pool<Jedis> jedisPool, String keyPrefix) {
         super(jedisPool, keyPrefix);
         super(jedisPool, keyPrefix);
     }
     }
-    public WxOpenInRedisBookConfigStorage(Platform platform,@NonNull Pool<Jedis> jedisPool, String keyPrefix) {
+
+    public WxOpenInRedisBookConfigStorage(Platform platform, @NonNull Pool<Jedis> jedisPool, String keyPrefix) {
         super(jedisPool, keyPrefix);
         super(jedisPool, keyPrefix);
         this.platform = platform;
         this.platform = platform;
     }
     }
@@ -39,7 +53,7 @@ public class WxOpenInRedisBookConfigStorage extends WxOpenInRedisConfigStorage {
 
 
     public String getVerifyTicketCacheKey() {
     public String getVerifyTicketCacheKey() {
         if (this.getComponentAppId() == null) {
         if (this.getComponentAppId() == null) {
-            System.out.println("getVerifyTicketCacheKey is null,please set component appid");
+            log.error("getVerifyTicketCacheKey is null,please set component appid");
             throw new NullPointerException("ComponentAppId is null,please set component appid");
             throw new NullPointerException("ComponentAppId is null,please set component appid");
         }
         }
         return WxThirdPartService.VERIFY_TICKET_KEY_PREFIX + this.getComponentAppId();
         return WxThirdPartService.VERIFY_TICKET_KEY_PREFIX + this.getComponentAppId();
@@ -52,23 +66,18 @@ public class WxOpenInRedisBookConfigStorage extends WxOpenInRedisConfigStorage {
 
 
     public String getComponentTokenCacheKey() {
     public String getComponentTokenCacheKey() {
         if (this.getComponentAppId() == null || this.getComponentAppSecret() == null || this.getComponentVerifyTicket() == null) {
         if (this.getComponentAppId() == null || this.getComponentAppSecret() == null || this.getComponentVerifyTicket() == null) {
-            System.out.println("getVerifyTicketCacheKey is null,please set component appid");
-//            throw new NullPointerException("ComponentAppId " +
-//                    "must not be  null,please set component appid");
-        }
-        if (this.getComponentAppSecret() == null) {
-            System.out.println("ComponentAppSecret is null, please set  ComponentAppSecret");
-        }
-        if (this.getComponentVerifyTicket() == null) {
-            System.out.println("ComponentVerifyTicket is null, please set  ComponentVerifyTicket");
+            log.warn("getVerifyTicketCacheKey is null,please set component appid");
+            throw new NullPointerException("verifyTicketCacheKey or ComponentAppSecret or ComponentVerifyTicket is null");
         }
         }
+
         ComponentInfo componentInfo = new ComponentInfo(getComponentAppId(), getComponentAppSecret(), getComponentVerifyTicket());
         ComponentInfo componentInfo = new ComponentInfo(getComponentAppId(), getComponentAppSecret(), getComponentVerifyTicket());
+        System.out.println(JsonUtils.toJsonNoSort(componentInfo));
         return WxThirdPartService.COMPONENT_TOKEN_KEY_PREFIX + Md5Util.md5(JsonUtils.toJsonNoSort(componentInfo));
         return WxThirdPartService.COMPONENT_TOKEN_KEY_PREFIX + Md5Util.md5(JsonUtils.toJsonNoSort(componentInfo));
     }
     }
 
 
 
 
     public String getAuthorizerTokenCacheKey(AuthorizerInfo authorizerInfo) {
     public String getAuthorizerTokenCacheKey(AuthorizerInfo authorizerInfo) {
-
+        System.out.println(JsonUtils.toJsonNoSort(authorizerInfo));
         return WxThirdPartService.COMPONENT_TOKEN_KEY_PREFIX + Md5Util.md5(JsonUtils.toJsonNoSort(authorizerInfo));
         return WxThirdPartService.COMPONENT_TOKEN_KEY_PREFIX + Md5Util.md5(JsonUtils.toJsonNoSort(authorizerInfo));
     }
     }
 
 
@@ -89,4 +98,147 @@ public class WxOpenInRedisBookConfigStorage extends WxOpenInRedisConfigStorage {
     }
     }
 
 
 
 
+    public void updateComponentVerifyTicketFromPhp() {
+        //s:95:"ticket@@@1CdDrkNz3kKKABPA9msNC3OqfjsBELmW7vhJzo0wwti2F5xzbNK0eGyGQkx2NmHO_sBkGRFPnDbZJovXmksh9w";
+        String verifyTicketCacheKey = getVerifyTicketCacheKey();
+        String phpComponentVerifyTicket = redisService.get(verifyTicketCacheKey);
+        Long expiresTime = redisService.getExpiresTime(verifyTicketCacheKey);
+        if (phpComponentVerifyTicket == null) {
+            throw new NullPointerException("phpComponentVerifyTicket is null ");
+        }
+        int begin = phpComponentVerifyTicket.indexOf("ticket@@@");
+        int end = phpComponentVerifyTicket.indexOf(";");
+        String substring = phpComponentVerifyTicket.substring(begin, end - 1);
+        setComponentVerifyTicket(substring, expiresTime);
+
+
+    }
+
+    public void updateComponentAccessTokenFromPhp() {
+        // a:2:{s:22:"component_access_token";s:157:"48_YOUUo8XLX1_R7jUvlDsnm1oxowmYcHcRVkdw8LrSLVMRbQlfbD8dWHwobcEWmINKZM-5s6vFdr_9dDSgBALEuBQ1XyTH3VjZrDKIat-UccLXSSs4x5uVUaNIjMbW4o0m13Y8HrBBVm1pcjE-WYLaAFAEGT";s:10:"expires_in";i:7200;}
+        String componentTokenCacheKey = getComponentTokenCacheKey();
+        System.out.println(componentTokenCacheKey);
+        String phpComponentToken = redisService.get(componentTokenCacheKey);
+        if (StringUtils.isNotEmpty(phpComponentToken)) {
+            String componentToken = parsePhpAccessToken(phpComponentToken);
+            setComponentAccessToken(componentToken);
+            updateComponentAccessToken(componentToken, redisService.getExpiresTime(componentTokenCacheKey).intValue());
+        }
+
+
+    }
+
+    private String parsePhpAccessToken(String phpComponentToken) {
+        String[] split = phpComponentToken.split(";");
+        String s = split[1];
+        String[] split1 = s.split(":");
+        String s1 = split1[2];
+        String componentToken = s1.replace("\"", "");
+        return componentToken;
+    }
+
+    public static void main(String[] args) {
+        String phpComponentVerifyTicket = "s:95:\"ticket@@@1CdDrkNz3kKKABPA9msNC3OqfjsBELmW7vhJzo0wwti2F5xzbNK0eGyGQkx2NmHO_sBkGRFPnDbZJovXmksh9w\";";
+        if (phpComponentVerifyTicket == null) {
+            throw new NullPointerException("phpComponentVerifyTicket is null ");
+        }
+        int begin = phpComponentVerifyTicket.indexOf("ticket@@@");
+        int end = phpComponentVerifyTicket.indexOf(";");
+        String substring = phpComponentVerifyTicket.substring(begin, end - 1);
+        System.out.println(substring);
+    }
+
+
+    public void updateAllAuthorizerAccessToken() {
+        List<AdminConfig> list = adminConfigService.selectByPlatformId(platform.getId());
+        if (list == null) {
+            throw new NullPointerException("WxOpenInRedisBookConfigStorage adminConfigList is null,please set it first");
+        }
+        updateAllAuthorizerAccessToken(list);
+
+    }
+
+    public void updateAllAuthorizerAccessToken(List<AdminConfig> list) {
+        for (AdminConfig adminConfig : list) {
+
+            updateAuthorizerAccessTokenFromPhp(adminConfig);
+
+
+        }
+
+    }
+
+
+    public boolean isComponentVerifyTicketExpired(){
+        Long expiresTime = redisService.getExpiresTime(this.componentVerifyTicketKey);
+        return expiresTime == null || expiresTime < 10L;
+
+    }
+
+    public void setComponentVerifyTicket(String componentVerifyTicket, long second) {
+        redisService.set(this.componentVerifyTicketKey, componentVerifyTicket, second);
+    }
+
+
+    @Override
+    public String getComponentVerifyTicket() {
+        String componentVerifyTicket = super.getComponentVerifyTicket();
+
+        if (StringUtils.isEmpty(componentVerifyTicket) || isComponentVerifyTicketExpired()) {
+            updateComponentVerifyTicketFromPhp();
+        }
+        return super.getComponentVerifyTicket();
+    }
+
+
+    @Override
+    public boolean isComponentAccessTokenExpired() {
+        boolean componentAccessTokenExpired = super.isComponentAccessTokenExpired();
+        if (componentAccessTokenExpired) {
+            updateComponentAccessTokenFromPhp();
+        }
+        return super.isComponentAccessTokenExpired();
+    }
+
+    @Override
+    public boolean isAuthorizerAccessTokenExpired(String appId) {
+        boolean authorizerAccessTokenExpired = super.isAuthorizerAccessTokenExpired(appId);
+        if (authorizerAccessTokenExpired) {
+            AdminConfig adminConfig = adminConfigService.selectByAppid(appId);
+            updateAuthorizerAccessTokenFromPhp(adminConfig);
+        }
+        return super.isAuthorizerAccessTokenExpired(appId);
+    }
+
+    private void updateAuthorizerAccessTokenFromPhp(AdminConfig adminConfig) {
+        String authorizerAppid = adminConfig.getAppid();
+
+        String json = adminConfig.getJson().toString();
+        AdminConfig.Info info = JsonUtils.getObject(json, AdminConfig.Info.class);
+        AdminConfig.AuthorizationInfo authorization_info = info.getAuthorization_info();
+        String authorizer_refresh_token = authorization_info.getAuthorizer_refresh_token();
+
+        //update refresh_token
+        updateAuthorizerRefreshToken(authorizerAppid, authorizer_refresh_token);
+
+
+        //更新token
+        AuthorizerInfo authorizerInfo = new AuthorizerInfo(this.getComponentAppId(), authorizerAppid, authorizer_refresh_token);
+        String authorizerTokenCacheKey = getAuthorizerTokenCacheKey(authorizerInfo);
+        //a:2:{s:23:"authorizer_access_token";s:157:"48_7NeCGMcCP63fE7auTG3I181GaH7sNeEFWj7hRIPkGkFBo00IsrhzSlauigVUdClbNfYvpH7bdZ3Oe04_kgf8-7_QoJGEX_wvDKSWz4AFThq6idME2zjk57_9Z2HKwL-Ba7uwapgwpTPQAcsRNABiAIDQDE";s:10:"expires_in";i:7200;}
+
+        System.out.println(authorizerTokenCacheKey);
+        String tokenString = redisService.get(authorizerTokenCacheKey);
+        if (StringUtils.isEmpty(tokenString)) {
+            log.warn("authorizer_access_token is null in php redis ");
+            return;
+        }
+        String token = parsePhpAccessToken(tokenString);
+        if (token == null) {
+            log.warn("AuthorizerToken is null in redis for key :" + authorizerTokenCacheKey);
+        } else {
+            updateAuthorizerAccessToken(authorizerAppid, token, redisService.getExpiresTime(authorizerTokenCacheKey).intValue());
+        }
+    }
+
 }
 }

+ 4 - 1
book-push/src/main/java/com/book/push/cons/UrlCons.java

@@ -9,12 +9,15 @@ package com.book.push.cons;
 
 
 public class UrlCons {
 public class UrlCons {
 
 
-    public static final String OAUTH2_REDIRECT_URL_LOGIN = SchemeCons.default_scheme_prefix + "://" + "%s/wx/redirect/{appid}/login";
+    public static final String OAUTH2_REDIRECT_URL_LOGIN = SchemeCons.default_scheme_prefix + "://" + "%s/wx/redirect/login";
     public static final String OAUTH2_REDIRECT_URL_SLIENT = SchemeCons.default_scheme_prefix + "://" + "%s.%s/wx/redirect/{appid}/slient";
     public static final String OAUTH2_REDIRECT_URL_SLIENT = SchemeCons.default_scheme_prefix + "://" + "%s.%s/wx/redirect/{appid}/slient";
     public static final String FRONT_URL = SchemeCons.default_scheme_prefix + "://" + "%s.%s/home.html#/%s?channelId=%d&userId=%s";
     public static final String FRONT_URL = SchemeCons.default_scheme_prefix + "://" + "%s.%s/home.html#/%s?channelId=%d&userId=%s";
+    public static final String URL_PARAMS = "channelId=%d&userId=%s";
     public static final String MODEL_BOOK = "readDetail";
     public static final String MODEL_BOOK = "readDetail";
 
 
     public static final String BOOK_URL = SchemeCons.default_scheme_prefix + "://" + "%s.%s/%s?channelId=%d&userId=%d&bookId=%s";
     public static final String BOOK_URL = SchemeCons.default_scheme_prefix + "://" + "%s.%s/%s?channelId=%d&userId=%d&bookId=%s";
 
 
 
 
+
+
 }
 }

+ 33 - 9
book-push/src/main/java/com/book/push/controller/BookIndexController.java

@@ -10,8 +10,11 @@ package com.book.push.controller;
 import com.book.dao.cps.pojo.AdminConfig;
 import com.book.dao.cps.pojo.AdminConfig;
 import com.book.push.cons.UrlCons;
 import com.book.push.cons.UrlCons;
 import com.book.push.service.dao.AdminConfigService;
 import com.book.push.service.dao.AdminConfigService;
+import com.book.push.service.redis.RedisService;
 import com.book.push.service.wx.WxThirdPartService;
 import com.book.push.service.wx.WxThirdPartService;
+import com.book.push.utils.Md5Util;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.api.WxConsts;
 import me.chanjar.weixin.common.api.WxConsts;
 import me.chanjar.weixin.open.api.WxOpenService;
 import me.chanjar.weixin.open.api.WxOpenService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -26,9 +29,9 @@ import javax.servlet.http.HttpServletRequest;
 /**
 /**
  * @author
  * @author
  */
  */
-//@AllArgsConstructor
+@Slf4j
 @RestController
 @RestController
-@RequestMapping("/index")
+@RequestMapping("/login")
 public class BookIndexController {
 public class BookIndexController {
     @Autowired
     @Autowired
     private AdminConfigService adminConfigService;
     private AdminConfigService adminConfigService;
@@ -37,7 +40,8 @@ public class BookIndexController {
 
 
     @Value("${book.debug}")
     @Value("${book.debug}")
     private Boolean debug;
     private Boolean debug;
-
+    @Autowired
+    private RedisService redisService;
     /**
     /**
      * //FIXME
      * //FIXME
      * <p>
      * <p>
@@ -45,19 +49,39 @@ public class BookIndexController {
      */
      */
 
 
 
 
-    @GetMapping("/{state}")
-    public String BookMain(HttpServletRequest request, @PathVariable String state) {
+//    @GetMapping("/{state}")
+//    public String BookMain(HttpServletRequest request, @PathVariable String state) {
+    @GetMapping()
+    public String BookMain(HttpServletRequest request) {
 
 
         StringBuffer url = request.getRequestURL();
         StringBuffer url = request.getRequestURL();
         String contextUrl = url.delete(url.length() - request.getRequestURI().length(), url.length()).toString();
         String contextUrl = url.delete(url.length() - request.getRequestURI().length(), url.length()).toString();
         String[] split = contextUrl.split("\\.");
         String[] split = contextUrl.split("\\.");
         String appid = split[0];
         String appid = split[0];
-        if (debug){
+        if (debug) {
             appid = "wx75b8899af31a7c93";
             appid = "wx75b8899af31a7c93";
         }
         }
+        String referer = request.getHeader("referer");
+        String state = Md5Util.md5(referer);
+        if (appid == null || !appid.startsWith("wx")) {
+
+
+
+            redisService.set(state, referer, 60);
+            if (referer == null) {
+                log.error("非 发来源,失败 ");
+                return "登录失败";
+            }
+            String replace = referer.replace("http://", "").replace("https://", "");
+            appid = replace.split("\\.")[0];
+            if (!appid.startsWith("wx")) {
+                return "登录失败";
+            }
+
+        }
 
 
         AdminConfig adminConfig = adminConfigService.selectByAppid(appid);
         AdminConfig adminConfig = adminConfigService.selectByAppid(appid);
-        String redirect_url = String.format(UrlCons.OAUTH2_REDIRECT_URL_LOGIN,contextUrl).replace("{appid}", appid);
+        String redirect_url = String.format(UrlCons.OAUTH2_REDIRECT_URL_LOGIN, contextUrl);
 
 
 
 
         Integer platformId = adminConfig.getPlatformId();
         Integer platformId = adminConfig.getPlatformId();
@@ -67,12 +91,12 @@ public class BookIndexController {
         // 静默授权
         // 静默授权
 
 
 
 
-
-
         return "redirect:" + auto2Url;
         return "redirect:" + auto2Url;
 
 
 
 
     }
     }
 
 
 
 
+
+
 }
 }

+ 36 - 34
book-push/src/main/java/com/book/push/controller/WxRedirectController.java

@@ -11,8 +11,10 @@ import com.book.push.service.dao.AdminConfigService;
 import com.book.push.service.dao.ConfigService;
 import com.book.push.service.dao.ConfigService;
 import com.book.push.service.dao.OpHostService;
 import com.book.push.service.dao.OpHostService;
 import com.book.push.service.dao.UserService;
 import com.book.push.service.dao.UserService;
+import com.book.push.service.redis.RedisService;
 import com.book.push.service.wx.WxThirdPartService;
 import com.book.push.service.wx.WxThirdPartService;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.api.WxConsts;
 import me.chanjar.weixin.common.api.WxConsts;
 import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
 import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
 import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.common.error.WxErrorException;
@@ -35,9 +37,10 @@ import org.springframework.web.bind.annotation.RequestParam;
  */
  */
 @AllArgsConstructor
 @AllArgsConstructor
 @Controller
 @Controller
-@RequestMapping("/wx/redirect/{appid}")
+@Slf4j
+@RequestMapping("/wx/redirect")
 public class WxRedirectController {
 public class WxRedirectController {
-    public static final Logger logger = LoggerFactory.getLogger(WxRedirectController.class);
+
     @Autowired
     @Autowired
     private UserService userService;
     private UserService userService;
     @Autowired
     @Autowired
@@ -50,14 +53,10 @@ public class WxRedirectController {
     private OpHostService opHostService;
     private OpHostService opHostService;
     @Autowired
     @Autowired
     private UserSilentService userSilentService;
     private UserSilentService userSilentService;
+    @Autowired
+    private RedisService redisService;
 
 
 
 
-    /**
-     * //FIXME
-     * 前端页面url
-     */
-//    private final static String FRONT_URL = "%s://%s%s?channelId=%d/userId=%d";
-
     /**
     /**
      * 接收微信静默授权,获取用户信息,跳转前台页面
      * 接收微信静默授权,获取用户信息,跳转前台页面
      *
      *
@@ -70,7 +69,7 @@ public class WxRedirectController {
     public String login(@PathVariable String appid, @RequestParam String code, @RequestParam String state, ModelMap map) {
     public String login(@PathVariable String appid, @RequestParam String code, @RequestParam String state, ModelMap map) {
 
 
         String[] s = state.split("_");
         String[] s = state.split("_");
-        if (s.length != 2 ) {
+        if (s.length != 2) {
 //            logger.error("静默登录state错误");
 //            logger.error("静默登录state错误");
 //            String frontUrl = getFrontUrl(ophost, page, userAdminId, userAdminId);
 //            String frontUrl = getFrontUrl(ophost, page, userAdminId, userAdminId);
             return "error";
             return "error";
@@ -89,7 +88,6 @@ public class WxRedirectController {
         Integer userAdminId = adminConfig.getAdminId();
         Integer userAdminId = adminConfig.getAdminId();
 
 
 
 
-
         Config config = configService.selectByName(SiteCons.SILENT_DEFAULT_CHANNEL);
         Config config = configService.selectByName(SiteCons.SILENT_DEFAULT_CHANNEL);
         Integer defaultAdminId = Integer.parseInt(config.getValue());
         Integer defaultAdminId = Integer.parseInt(config.getValue());
         AdminConfig defaultAdminConfig = adminConfigService.selectByAdminId(defaultAdminId);
         AdminConfig defaultAdminConfig = adminConfigService.selectByAdminId(defaultAdminId);
@@ -107,23 +105,23 @@ public class WxRedirectController {
                 WxMpUser wxMpUser = wxMpServiceByAppid.getUserService()
                 WxMpUser wxMpUser = wxMpServiceByAppid.getUserService()
                         .userInfo(openId, null);
                         .userInfo(openId, null);
 
 
-               user =  userService.createUserByWxUser(wxMpUser,channelId);
+                user = userService.createUserByWxUser(wxMpUser, channelId);
 
 
             }
             }
             if (userSlientExist(user, null, defaultAdminConfig.getAppid())) {
             if (userSlientExist(user, null, defaultAdminConfig.getAppid())) {
-                String frontUrl = getFrontUrl(adminConfig.getAppid(),ophost, page, userAdminId, String.valueOf(user.getId()));
+                String frontUrl = getFrontUrl(adminConfig.getAppid(), ophost, page, userAdminId, String.valueOf(user.getId()));
                 return "redirect:" + frontUrl;
                 return "redirect:" + frontUrl;
             } else {
             } else {
-                if (defaultAdminId.equals(channelId)){
+                if (defaultAdminId.equals(channelId)) {
                     //保存静默授权
                     //保存静默授权
-                    saveUserSlitent(user,openId,appid);
-                    String frontUrl = getFrontUrl(adminConfig.getAppid(),ophost, page, userAdminId, String.valueOf(user.getId()));
+                    saveUserSlitent(user, openId, appid);
+                    String frontUrl = getFrontUrl(adminConfig.getAppid(), ophost, page, userAdminId, String.valueOf(user.getId()));
                     return "redirect:" + frontUrl;
                     return "redirect:" + frontUrl;
-                }else {
+                } else {
                     Integer platformId = defaultAdminConfig.getPlatformId();
                     Integer platformId = defaultAdminConfig.getPlatformId();
                     String redirect_url = UrlCons.OAUTH2_REDIRECT_URL_SLIENT.replace("{appid}", defaultAdminConfig.getAppid());
                     String redirect_url = UrlCons.OAUTH2_REDIRECT_URL_SLIENT.replace("{appid}", defaultAdminConfig.getAppid());
                     Ophost menuHost = opHostService.selectById(defaultAdminConfig.getMenuophostId());
                     Ophost menuHost = opHostService.selectById(defaultAdminConfig.getMenuophostId());
-                    redirect_url = String.format(redirect_url,appid,menuHost.getHost());
+                    redirect_url = String.format(redirect_url, appid, menuHost.getHost());
 
 
                     wxOpenService = thirdPartService.getWxOpenServiceByPlatFormId(platformId);
                     wxOpenService = thirdPartService.getWxOpenServiceByPlatFormId(platformId);
                     String auto2Url = wxOpenService.getWxOpenComponentService().getWxMpServiceByAppid(defaultAdminConfig.getAppid()).getOAuth2Service()
                     String auto2Url = wxOpenService.getWxOpenComponentService().getWxMpServiceByAppid(defaultAdminConfig.getAppid()).getOAuth2Service()
@@ -133,22 +131,21 @@ public class WxRedirectController {
                 }
                 }
 
 
 
 
-
             }
             }
         } catch (WxErrorException e) {
         } catch (WxErrorException e) {
 //            logger.error(e.getMessage());
 //            logger.error(e.getMessage());
             e.printStackTrace();
             e.printStackTrace();
-            String frontUrl = getFrontUrl(adminConfig.getAppid(),ophost, state, 0, "");
+            String frontUrl = getFrontUrl(adminConfig.getAppid(), ophost, state, 0, "");
             return "redirect:" + frontUrl;
             return "redirect:" + frontUrl;
         }
         }
 
 
 
 
-
     }
     }
+
     @RequestMapping("/slient")
     @RequestMapping("/slient")
     public String slient(@PathVariable String appid, @RequestParam String code, @RequestParam String state, ModelMap map) {
     public String slient(@PathVariable String appid, @RequestParam String code, @RequestParam String state, ModelMap map) {
         String[] s = state.split("_");
         String[] s = state.split("_");
-        if (s.length != 3 ) {
+        if (s.length != 3) {
 //            logger.error("静默登录state错误");
 //            logger.error("静默登录state错误");
 //            String frontUrl = getFrontUrl(ophost, "page", userAdminId, userAdminId);
 //            String frontUrl = getFrontUrl(ophost, "page", userAdminId, userAdminId);
             return "error";
             return "error";
@@ -168,26 +165,22 @@ public class WxRedirectController {
         Integer userAdminId = adminConfig.getAdminId();
         Integer userAdminId = adminConfig.getAdminId();
 
 
 
 
-
-
-
-
         WxOpenService wxOpenService = thirdPartService.getWxOpenServiceByPlatFormId(fromPlatformId);
         WxOpenService wxOpenService = thirdPartService.getWxOpenServiceByPlatFormId(fromPlatformId);
         try {
         try {
             WxOAuth2AccessToken accessToken = wxOpenService.getWxOpenComponentService().getWxMpServiceByAppid(appid).getOAuth2Service().getAccessToken(code);
             WxOAuth2AccessToken accessToken = wxOpenService.getWxOpenComponentService().getWxMpServiceByAppid(appid).getOAuth2Service().getAccessToken(code);
             String openId = accessToken.getOpenId();
             String openId = accessToken.getOpenId();
-            saveUserSlitent(user,openId,appid);
-            String frontUrl = getFrontUrl(adminConfig.getAppid(),ophost, page, userAdminId, String.valueOf(user.getId()));
+            saveUserSlitent(user, openId, appid);
+            String frontUrl = getFrontUrl(adminConfig.getAppid(), ophost, page, userAdminId, String.valueOf(user.getId()));
             return "redirect:" + frontUrl;
             return "redirect:" + frontUrl;
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             e.printStackTrace();
-            String frontUrl = getFrontUrl(adminConfig.getAppid(),ophost, page, 0, "");
+            String frontUrl = getFrontUrl(adminConfig.getAppid(), ophost, page, 0, "");
             return "redirect:" + frontUrl;
             return "redirect:" + frontUrl;
         }
         }
 
 
 
 
-
     }
     }
+
     private void saveUserSlitent(User user, String openId, String appid) {
     private void saveUserSlitent(User user, String openId, String appid) {
         UserSilent userSilent = new UserSilent();
         UserSilent userSilent = new UserSilent();
         userSilent.setUserId(user.getId());
         userSilent.setUserId(user.getId());
@@ -211,9 +204,18 @@ public class WxRedirectController {
 
 
     }
     }
 
 
-    private String getFrontUrl(String appid,Ophost ophost, String state, Integer userAdminId, String userId) {
-        String host = ophost.getHost();
-        String frontUrl = String.format(UrlCons.FRONT_URL,appid,host, state, userAdminId, userId);
-        return frontUrl;
+    private String getFrontUrl(String appid, Ophost ophost, String state, Integer userAdminId, String userId) {
+
+        String s = redisService.get(state);
+        if (s!=null && s.startsWith("http")){
+            String sp = s.contains("?") ? "&" : "?";
+            s = String.format(s + sp + UrlCons.URL_PARAMS, userAdminId, userId);
+            return  s;
+        }else {
+            String host = ophost.getHost();
+            String frontUrl = String.format(UrlCons.FRONT_URL,appid,host, state, userAdminId, userId);
+            return frontUrl;
+        }
+
     }
     }
 }
 }

+ 2 - 0
book-push/src/main/java/com/book/push/service/redis/RedisService.java

@@ -27,4 +27,6 @@ public interface RedisService {
     void setSet(String key, Set<String> set);
     void setSet(String key, Set<String> set);
 
 
     Set<String> getSet(String key);
     Set<String> getSet(String key);
+
+    void set(String key, String value, long second);
 }
 }

+ 7 - 0
book-push/src/main/java/com/book/push/service/redis/impl/RedisServiceImpl.java

@@ -10,6 +10,7 @@ import redis.clients.jedis.JedisPool;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.Set;
 import java.util.Set;
+import java.util.concurrent.TimeUnit;
 
 
 /**
 /**
  * created in 2021/8/20
  * created in 2021/8/20
@@ -92,5 +93,11 @@ public class RedisServiceImpl implements RedisService {
         return jedis.smembers(key);
         return jedis.smembers(key);
     }
     }
 
 
+    @Override
+    public void set(String key, String  value, long second) {
+        @Cleanup Jedis jedis = jedisPool.getResource();
+        jedis.psetex(key, TimeUnit.SECONDS.toMillis(second), value);
+    }
+
 
 
 }
 }

+ 17 - 50
book-push/src/main/java/com/book/push/service/wx/impl/WxThirdPartServiceImpl.java

@@ -82,32 +82,23 @@ public class WxThirdPartServiceImpl implements WxThirdPartService {
         Set<Integer> platFormIdSet = integerPlatformMap.keySet();
         Set<Integer> platFormIdSet = integerPlatformMap.keySet();
         platFormIdSet.stream().forEach(id -> {
         platFormIdSet.stream().forEach(id -> {
             Platform platform = integerPlatformMap.get(id);
             Platform platform = integerPlatformMap.get(id);
-            logger.info("platform_id:" + id + "-->"+platform.toString());
+            logger.info("platform_id:" + id + "-->" + platform.toString());
             WxOpenService wxOpenService = new WxOpenServiceImpl();
             WxOpenService wxOpenService = new WxOpenServiceImpl();
             WxOpenInRedisBookConfigStorage inRedisConfigStorage = new WxOpenInRedisBookConfigStorage(platform, jedisPool, String.format(PLATFORM_KEY_PREFIX, id));
             WxOpenInRedisBookConfigStorage inRedisConfigStorage = new WxOpenInRedisBookConfigStorage(platform, jedisPool, String.format(PLATFORM_KEY_PREFIX, id));
             inRedisConfigStorage.setComponentAppId(platform.getAppid());
             inRedisConfigStorage.setComponentAppId(platform.getAppid());
             inRedisConfigStorage.setComponentAppSecret(platform.getSecret());
             inRedisConfigStorage.setComponentAppSecret(platform.getSecret());
+            inRedisConfigStorage.setComponentAesKey(platform.getAesKey());
+            inRedisConfigStorage.setComponentToken(platform.getToken());
+            inRedisConfigStorage.setRedisService(redisService);
+//            inRedisConfigStorage.setAdminConfigList(adminConfigService.selectByPlatformId(platform.getId()));
+            inRedisConfigStorage.setAdminConfigService(adminConfigService);
 
 
+            inRedisConfigStorage.updateComponentVerifyTicketFromPhp();
+            inRedisConfigStorage.updateComponentAccessTokenFromPhp();
+            inRedisConfigStorage.updateAllAuthorizerAccessToken();
 
 
-            logger.info("从redis 取值 ComponentVerifyTicket ,key = " + inRedisConfigStorage.getVerifyTicketCacheKey());
-            if (redisService.get(inRedisConfigStorage.getVerifyTicketCacheKey()) == null) {
-                logger.error("ComponentVerifyTicket is null in redis for key :" + inRedisConfigStorage.getVerifyTicketCacheKey());
-            } else {
-
-                inRedisConfigStorage.setComponentVerifyTicket(redisService.get(inRedisConfigStorage.getVerifyTicketCacheKey()));
-            }
-            logger.info("从redis 取值 ComponentToken ,key = " + inRedisConfigStorage.getComponentTokenCacheKey());
-            if (redisService.get(inRedisConfigStorage.getComponentTokenCacheKey()) == null) {
-                logger.error("ComponentToken is null in redis for key :" + inRedisConfigStorage.getComponentTokenCacheKey());
-            } else {
-
-                inRedisConfigStorage.setComponentToken(redisService.get(inRedisConfigStorage.getComponentTokenCacheKey()));
-            }
-
-
-            inRedisConfigStorage.setComponentAesKey(platform.getAesKey());
             wxOpenService.setWxOpenConfigStorage(inRedisConfigStorage);
             wxOpenService.setWxOpenConfigStorage(inRedisConfigStorage);
-            updateAllAuthorizerAccessToken(inRedisConfigStorage);
+
             wxOpenServiceMap.put(id, wxOpenService);
             wxOpenServiceMap.put(id, wxOpenService);
         });
         });
 
 
@@ -154,34 +145,7 @@ public class WxThirdPartServiceImpl implements WxThirdPartService {
 
 
     }
     }
 
 
-    private void updateAllAuthorizerAccessToken(WxOpenInRedisBookConfigStorage wxOpenInRedisBookConfigStorage) {
-        logger.info("updateAllAuthorizerAccessToken... ");
-        Platform platform = wxOpenInRedisBookConfigStorage.getPlatform();
-        List<AdminConfig> list = adminConfigService.selectByPlatformId(platform.getId());
-        for (AdminConfig adminConfig : list) {
-            logger.info("adminConfig:" + "-->"+adminConfig.toString());
 
 
-            String appid = adminConfig.getAppid();
-
-            String json = adminConfig.getJson().toString();
-            AdminConfig.Info info = JsonUtils.getObject(json, AdminConfig.Info.class);
-            AdminConfig.AuthorizationInfo authorization_info = info.getAuthorization_info();
-            String authorizer_refresh_token = authorization_info.getAuthorizer_refresh_token();
-            wxOpenInRedisBookConfigStorage.updateAuthorizerRefreshToken(appid, authorizer_refresh_token);
-            AuthorizerInfo authorizerInfo = new AuthorizerInfo(wxOpenInRedisBookConfigStorage.getComponentAppId(), appid, adminConfig.getRefreshToken());
-            String authorizerTokenCacheKey = wxOpenInRedisBookConfigStorage.getAuthorizerTokenCacheKey(authorizerInfo);
-            String token = redisService.get(authorizerTokenCacheKey);
-            if (token == null) {
-                logger.error("AuthorizerToken is null in redis for key :" + authorizerTokenCacheKey);
-            } else {
-                wxOpenInRedisBookConfigStorage.updateAuthorizerAccessToken(appid, token, redisService.getExpiresTime(authorizerTokenCacheKey).intValue());
-            }
-
-
-        }
-
-
-    }
 
 
 
 
     @Override
     @Override
@@ -196,20 +160,23 @@ public class WxThirdPartServiceImpl implements WxThirdPartService {
 
 
     public static void main(String[] args) {
     public static void main(String[] args) {
         ComponentInfo componentInfo = new ComponentInfo("wxa6f2133192bfbcac", "a828e6b5eb87419e50826c60b9a20201"
         ComponentInfo componentInfo = new ComponentInfo("wxa6f2133192bfbcac", "a828e6b5eb87419e50826c60b9a20201"
-                , "ticket@@@M43q27xlyTm9y4-y-qj1Wdu6V2omjnkuXA_EnXVuQp14BB0VFz0RmtDlzJ8EdCPA9tdr1rwgxhWN1usquHtHWA");
+                , "ticket@@@qP9Pd4w50ic2Jws07j4a9qbc0YXLwWi8YLjcII08Rc0rSC0djpv_fD20AGqWlTSXgyFzmyWuPgBeNm8o8ImzfQ");
         System.out.println(JsonUtils.toJsonString(componentInfo));
         System.out.println(JsonUtils.toJsonString(componentInfo));
-        String s =  WxThirdPartService.COMPONENT_TOKEN_KEY_PREFIX + Md5Util.md5(JsonUtils.toJsonString(componentInfo));
+        String s = WxThirdPartService.COMPONENT_TOKEN_KEY_PREFIX + Md5Util.md5(JsonUtils.toJsonString(componentInfo));
 
 
         System.out.println(s);
         System.out.println(s);
 
 
+        String r = "{\"component_appid\":\"wxa6f2133192bfbcac\",\"component_appsecret\":\"a828e6b5eb87419e50826c60b9a20201\",\"component_verify_ticket\":\"ticket@@@qP9Pd4w50ic2Jws07j4a9qbc0YXLwWi8YLjcII08Rc0rSC0djpv_fD20AGqWlTSXgyFzmyWuPgBeNm8o8ImzfQ\"}";
+        System.out.println("real=" + Md5Util.md5(r));
+
         //
         //
         System.out.println("------------------------------------------------------------------------------------------");
         System.out.println("------------------------------------------------------------------------------------------");
 
 
 
 
-        AuthorizerInfo authorizerInfo = new AuthorizerInfo("wxa6f2133192bfbcac","wxe1271417b2ff5b1c","refreshtoken@@@N0INeuo9aWT1PdFNIfSTynUm8eI5gGp9fmg_SAG69p8");
+        AuthorizerInfo authorizerInfo = new AuthorizerInfo("wxa6f2133192bfbcac", "wxe1271417b2ff5b1c", "refreshtoken@@@N0INeuo9aWT1PdFNIfSTynUm8eI5gGp9fmg_SAG69p8");
         System.out.println(JsonUtils.toJsonNoSort(authorizerInfo));
         System.out.println(JsonUtils.toJsonNoSort(authorizerInfo));
         System.out.println("{\"component_appid\":\"wxa6f2133192bfbcac\",\"authorizer_appid\":\"wxe1271417b2ff5b1c\",\"authorizer_refresh_token\":\"refreshtoken@@@N0INeuo9aWT1PdFNIfSTynUm8eI5gGp9fmg_SAG69p8\"}");
         System.out.println("{\"component_appid\":\"wxa6f2133192bfbcac\",\"authorizer_appid\":\"wxe1271417b2ff5b1c\",\"authorizer_refresh_token\":\"refreshtoken@@@N0INeuo9aWT1PdFNIfSTynUm8eI5gGp9fmg_SAG69p8\"}");
-        String s1 =  WxThirdPartService.COMPONENT_TOKEN_KEY_PREFIX + Md5Util.md5(JsonUtils.toJsonNoSort(authorizerInfo));
+        String s1 = WxThirdPartService.COMPONENT_TOKEN_KEY_PREFIX + Md5Util.md5(JsonUtils.toJsonNoSort(authorizerInfo));
         System.out.println(s1);
         System.out.println(s1);
         System.out.println(Md5Util.md5("{\"component_appid\":\"wxa6f2133192bfbcac\",\"authorizer_appid\":\"wxe1271417b2ff5b1c\",\"authorizer_refresh_token\":\"refreshtoken@@@N0INeuo9aWT1PdFNIfSTynUm8eI5gGp9fmg_SAG69p8\"}"));
         System.out.println(Md5Util.md5("{\"component_appid\":\"wxa6f2133192bfbcac\",\"authorizer_appid\":\"wxe1271417b2ff5b1c\",\"authorizer_refresh_token\":\"refreshtoken@@@N0INeuo9aWT1PdFNIfSTynUm8eI5gGp9fmg_SAG69p8\"}"));
     }
     }

+ 14 - 14
book-push/src/main/resources/application-dev.yml

@@ -1,13 +1,13 @@
 server:
 server:
-  port: 8080
+  port: 18089
 
 
 book:
 book:
-  debug: true
+  debug: false
   redis:
   redis:
-    host: 121.41.100.198
+    host: r-bp1fhw9pqpgtfnu638pd.redis.rds.aliyuncs.com
     port: 6379
     port: 6379
     database: 0
     database: 0
-    password: wrfg6OTNaXTqd96H7TK7bYIV
+    password: 5uUL$V!UBsVPf+9P$q4Y
     timeout: 1000  # 数据库连接超时时间,2.0 中该参数的类型为Duration,这里在配置的时候需要指明单位
     timeout: 1000  # 数据库连接超时时间,2.0 中该参数的类型为Duration,这里在配置的时候需要指明单位
     # 最大空闲连接数
     # 最大空闲连接数
     maxIdle: 500
     maxIdle: 500
@@ -24,9 +24,9 @@ spring:
     cps:
     cps:
       type: com.alibaba.druid.pool.DruidDataSource
       type: com.alibaba.druid.pool.DruidDataSource
       driver-class-name: com.mysql.cj.jdbc.Driver
       driver-class-name: com.mysql.cj.jdbc.Driver
-      jdbc-url: jdbc:mysql://121.41.100.198:3306/test_cps?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC
-      username: root
-      password: root
+      jdbc-url: jdbc:mysql://rm-bp1978b18gyf7v7byzo.mysql.rds.aliyuncs.com:3306/test_cps?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC
+      username: test_cps
+      password: oRt+rY(7x3&kB#OQdit9
       #下面为连接池补充设置
       #下面为连接池补充设置
       druid:
       druid:
         initial-size: 5 # 初始化
         initial-size: 5 # 初始化
@@ -58,9 +58,9 @@ spring:
     polar:
     polar:
       type: com.alibaba.druid.pool.DruidDataSource
       type: com.alibaba.druid.pool.DruidDataSource
       driver-class-name: com.mysql.cj.jdbc.Driver
       driver-class-name: com.mysql.cj.jdbc.Driver
-      jdbc-url: jdbc:mysql://121.41.100.198:3306/polar?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC
-      username: root
-      password: root
+      jdbc-url: jdbc:mysql://rm-bp1978b18gyf7v7byzo.mysql.rds.aliyuncs.com:3306/polardb?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC
+      username: test_cps
+      password: oRt+rY(7x3&kB#OQdit9
       #下面为连接池补充设置
       #下面为连接池补充设置
       druid:
       druid:
         initial-size: 5 # 初始化
         initial-size: 5 # 初始化
@@ -92,9 +92,9 @@ spring:
     cpsshard:
     cpsshard:
       type: com.alibaba.druid.pool.DruidDataSource
       type: com.alibaba.druid.pool.DruidDataSource
       driver-class-name: com.mysql.cj.jdbc.Driver
       driver-class-name: com.mysql.cj.jdbc.Driver
-      jdbc-url: jdbc:mysql://121.41.100.198:3306/test_cps_shard_192?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC
-      username: root
-      password: root
+      jdbc-url: jdbc:mysql://rm-bp1978b18gyf7v7byzo.mysql.rds.aliyuncs.com:3306/test_cps_shard?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC
+      username: test_cps
+      password: oRt+rY(7x3&kB#OQdit9
       #下面为连接池补充设置
       #下面为连接池补充设置
       druid:
       druid:
         initial-size: 5 # 初始化
         initial-size: 5 # 初始化
@@ -136,4 +136,4 @@ logging:
     com:
     com:
       book:
       book:
         server:
         server:
-          mapper: debug
+          mapper: error

+ 1 - 1
book-push/src/main/resources/log4j2.xml

@@ -57,7 +57,7 @@
         <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
         <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
         <logger name="org.springframework" level="INFO"/>
         <logger name="org.springframework" level="INFO"/>
         <logger name="org.mybatis" level="INFO"/>
         <logger name="org.mybatis" level="INFO"/>
-        <root level="all" includeLocation="true">
+        <root level="INFO" includeLocation="true">
             <appender-ref ref="Console"/>
             <appender-ref ref="Console"/>
             <appender-ref ref="RollingFileInfo"/>
             <appender-ref ref="RollingFileInfo"/>
             <appender-ref ref="RollingFileWarn"/>
             <appender-ref ref="RollingFileWarn"/>