Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/master'

tianyunperfect 3 gadi atpakaļ
vecāks
revīzija
2a0b7c16f0

+ 60 - 0
book-push/src/main/java/com/book/push/config/WxOpenInRedisBookConfigStorage.java

@@ -0,0 +1,60 @@
+package com.book.push.config;
+
+import com.book.push.service.wx.WxThirdPartService;
+import com.book.push.utils.JsonUtils;
+import com.book.push.utils.Md5Util;
+import com.book.push.vo.AuthorizerInfo;
+import com.book.push.vo.ComponentInfo;
+import lombok.NonNull;
+import me.chanjar.weixin.open.api.impl.WxOpenInRedisConfigStorage;
+import redis.clients.jedis.Jedis;
+import redis.clients.jedis.util.Pool;
+
+/**
+ * created in 2021/8/25
+ * Project: book-store
+ *
+ * @author win7
+ */
+
+public class WxOpenInRedisBookConfigStorage extends WxOpenInRedisConfigStorage {
+
+
+    public WxOpenInRedisBookConfigStorage(@NonNull Pool<Jedis> jedisPool, String keyPrefix) {
+        super(jedisPool, keyPrefix);
+    }
+
+    public String getVerifyTicketCacheKey(String appid) {
+        return WxThirdPartService.VERIFY_TICKET_KEY_PREFIX + appid;
+    }
+
+    public String getVerifyTicketCacheKey() {
+        if (this.getComponentAppId() == null) {
+            System.out.println("getVerifyTicketCacheKey is null,please set component appid");
+            throw new NullPointerException("ComponentAppId is null,please set component appid");
+        }
+        return WxThirdPartService.VERIFY_TICKET_KEY_PREFIX + this.getComponentAppId();
+    }
+
+    public String getComponentTokenCacheKey(ComponentInfo componentInfo) {
+
+        return WxThirdPartService.TOKEN_KEY_PREFIX + Md5Util.md5(JsonUtils.toJsonString(componentInfo));
+    }
+
+    public String getComponentTokenCacheKey() {
+        if (this.getComponentAppId() == null || this.getComponentAppSecret() == null || this.getComponentVerifyTicket() == null) {
+            throw new NullPointerException("ComponentAppId , ComponentAppSecret and ComponentVerifyTicket " +
+                    "must be not null,please set component appid");
+        }
+        ComponentInfo componentInfo = new ComponentInfo(getComponentAppId(), getComponentAppSecret(), getComponentVerifyTicket());
+        return WxThirdPartService.TOKEN_KEY_PREFIX + Md5Util.md5(JsonUtils.toJsonString(componentInfo));
+    }
+
+
+    public String getAuthorizerTokenCacheKey(AuthorizerInfo authorizerInfo) {
+
+        return WxThirdPartService.TOKEN_KEY_PREFIX + Md5Util.md5(JsonUtils.toJsonString(authorizerInfo));
+    }
+
+
+}

+ 0 - 81
book-push/src/main/java/com/book/push/controller/WxRedirectController.java

@@ -138,88 +138,7 @@ public class WxRedirectController {
         }
 
 
-       /* if (s.length == 2) {
-
-
-            if (defaultAdminId.equals(userAdminId)) {
-                //不走二次静默授权
-                WxOpenService wxOpenService = thirdPartService.getWxOpenServiceByPlatFormId(adminConfig.getPlatformId());
-                try {
-                    WxOAuth2AccessToken accessToken = wxOpenService.getWxOpenComponentService().getWxMpServiceByAppid(appid).getOAuth2Service().getAccessToken(code);
-                    String openId = accessToken.getOpenId();
-                    User user = userService.selectByOpenId(openId);
-                    if (user != null) {
-                        String frontUrl = getFrontUrl(ophost, page, userAdminId, userAdminId);
-                        return "redirect:" + frontUrl;
-                    } else {
-                        //todo 创建新用户
-                    }
-                    checkUserSlient(openId, user.getOpenid(), triAppid);
-                } catch (WxErrorException e) {
-                    logger.error(e.getMessage());
-                    e.printStackTrace();
-                    String frontUrl = getFrontUrl(ophost, state, 0, 0);
-                    return "redirect:" + frontUrl;
-                }
-
-            } else {
-                checkUserSlient(user, user.getOpenid(), triAppid);
-                AdminConfig defaultAdmin = adminConfigService.selectByAdminId(defaultAdminId);
-                Integer platformId = defaultAdmin.getPlatformId();
-                String redirect_url = UrlCons.OAUTH2_REDIRECT_URL.replace("{appid}", defaultAdmin.getAppid());
-
-
-                WxOpenService wxOpenService = thirdPartService.getWxOpenServiceByPlatFormId(platformId);
-                String auto2Url = wxOpenService.getWxOpenComponentService().getWxMpServiceByAppid(appid).getOAuth2Service()
-                        .buildAuthorizationUrl(redirect_url, WxConsts.OAuth2Scope.SNSAPI_BASE, state + "_" + defaultAdmin.getAdminId());
-
-                return "redirect:" + auto2Url;
-
-
-            }
-        } else if (s.length == 3) {
-            Integer publicAdminId = Integer.parseInt(s[2]);
-            AdminConfig defaultAdmin = adminConfigService.selectByAdminId(publicAdminId);
-            Integer platformId = defaultAdmin.getPlatformId();
-            WxOpenService wxOpenService = thirdPartService.getWxOpenServiceByPlatFormId(adminConfig.getPlatformId());
-            try {
-                WxOAuth2AccessToken accessToken = wxOpenService.getWxOpenComponentService().getWxMpServiceByAppid(appid).getOAuth2Service().getAccessToken(code);
-                //公共openid
-                String openId = accessToken.getOpenId();
-
-
-            } catch (Exception e) {
-                logger.error("公共静默授权失败");
-            }
-
-        } else {
-            logger.error("静默登录state错误");
-            String frontUrl = getFrontUrl(ophost, page, userAdminId, userAdminId);
-            return "redirect:" + frontUrl;
-        }
-*/
-
-      /*  WxOpenService wxOpenService = thirdPartService.getWxOpenServiceByPlatFormId(platformId);
-        String auto2Url = wxOpenService.getWxOpenComponentService().getWxMpServiceByAppid(appid).getOAuth2Service()
-
-        try {
-            WxOAuth2AccessToken accessToken = wxService.getOAuth2Service().getAccessToken(code);
-            WxOAuth2UserInfo wxOAuth2UserInfo = wxService.getOAuth2Service().getUserInfo(accessToken, null);
-            map.put("user", wxOAuth2UserInfo);
-            User user = new User();
-            user.setOpenid(wxOAuth2UserInfo.getOpenid());
-            user = userService.selectUserByUser(user);
-            if (user == null) {
-                //todo
-            }
-            String openid = user.getOpenid();
-            String frontUrl = String.format(FRONT_URL, state, appid, user.getId());
-            return "redirect:" + frontUrl;
-        } catch (WxErrorException e) {
-            e.printStackTrace();
-        }*/
 
-//        return "greet_user";
     }
     @RequestMapping("/slient")
     public String slient(@PathVariable String appid, @RequestParam String code, @RequestParam String state, ModelMap map) {

+ 3 - 0
book-push/src/main/java/com/book/push/service/wx/WxThirdPartService.java

@@ -11,5 +11,8 @@ import me.chanjar.weixin.open.api.WxOpenService;
  */
 
 public interface WxThirdPartService {
+
+    public static final String VERIFY_TICKET_KEY_PREFIX = "easywechat.open_platform.verify_ticket.";
+    public static final String TOKEN_KEY_PREFIX = "easywechat.kernel.access_token.";
     WxOpenService getWxOpenServiceByPlatFormId(Integer platFormId);
 }

+ 15 - 4
book-push/src/main/java/com/book/push/service/wx/impl/WxThirdPartServiceImpl.java

@@ -2,8 +2,10 @@ package com.book.push.service.wx.impl;
 
 import com.book.dao.cps.pojo.Platform;
 import com.book.push.config.RedisProperties;
+import com.book.push.config.WxOpenInRedisBookConfigStorage;
 import com.book.push.handler.*;
 import com.book.push.service.dao.PlatformService;
+import com.book.push.service.redis.RedisService;
 import com.book.push.service.wx.WxThirdPartService;
 import lombok.AllArgsConstructor;
 import lombok.RequiredArgsConstructor;
@@ -40,7 +42,7 @@ import static me.chanjar.weixin.mp.constant.WxMpEventConstants.POI_CHECK_NOTIFY;
 @RequiredArgsConstructor
 @EnableConfigurationProperties(RedisProperties.class)
 public class WxThirdPartServiceImpl implements WxThirdPartService {
-//    private Logger logger = LoggerFactory.getLogger(getClass());
+    private Logger logger = LoggerFactory.getLogger(getClass());
 
     private final LogHandler logHandler;
     private final NullHandler nullHandler;
@@ -58,24 +60,33 @@ public class WxThirdPartServiceImpl implements WxThirdPartService {
     @Autowired
     private PlatformService platformService;
     @Autowired
+    private RedisService redisService;
+    @Autowired
     private JedisPool jedisPool;
 
     private WxThirdPartMessageRouter wxThirdPartMessageRouter;
-public static final String KEY_PREFIX = "platformId_%d" ;
+    public static final String PLATFORM_KEY_PREFIX = "platformId_%d";
+
+
     @PostConstruct
     public void load() {
+
+
+
+
         Map<Integer, Platform> integerPlatformMap = platformService.selectAll();
         Set<Integer> platFormIdSet = integerPlatformMap.keySet();
         ConcurrentHashMap newWxOpenServiceMap = new ConcurrentHashMap<Integer, WxOpenService>();
         platFormIdSet.stream().forEach(id -> {
             Platform platform = integerPlatformMap.get(id);
             WxOpenService wxOpenService = new WxOpenServiceImpl();
-            WxOpenInRedisConfigStorage inRedisConfigStorage = new WxOpenInRedisConfigStorage(jedisPool,String.format(KEY_PREFIX, id));
+            WxOpenInRedisBookConfigStorage inRedisConfigStorage = new WxOpenInRedisBookConfigStorage(jedisPool, String.format(PLATFORM_KEY_PREFIX, id));
             inRedisConfigStorage.setComponentAppId(platform.getAppid());
             inRedisConfigStorage.setComponentAppSecret(platform.getSecret());
 
             //FIXME  这里有错误,请注意修改
-            inRedisConfigStorage.setComponentToken(platform.getToken());//错误位置
+            inRedisConfigStorage.setComponentVerifyTicket(redisService.get(inRedisConfigStorage.getVerifyTicketCacheKey()));
+            inRedisConfigStorage.setComponentToken(redisService.get(inRedisConfigStorage.getComponentTokenCacheKey()));//错误位置
             inRedisConfigStorage.setComponentAesKey(platform.getAesKey());
             wxOpenService.setWxOpenConfigStorage(inRedisConfigStorage);
             wxOpenServiceMap.put(id, wxOpenService);

+ 16 - 0
book-push/src/main/java/com/book/push/utils/JsonUtils.java

@@ -0,0 +1,16 @@
+package com.book.push.utils;
+
+import com.alibaba.fastjson.JSON;
+
+/**
+ * created in 2021/8/25
+ * Project: book-store
+ *
+ * @author win7
+ */
+
+public class JsonUtils {
+    public static String toJsonString(Object object) {
+        return JSON.toJSONString(object);
+    }
+}

+ 50 - 0
book-push/src/main/java/com/book/push/utils/Md5Util.java

@@ -0,0 +1,50 @@
+package com.book.push.utils;
+
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+
+public class Md5Util {
+	
+	
+	
+		/**
+		 * MD5工具
+		 * @param str
+		 * @return 
+		 */
+		public static String md5(String str) {
+	      if (str == null) {
+	          return null;
+	      }
+	      MessageDigest messageDigest = null;
+
+	      try {
+	          messageDigest = MessageDigest.getInstance("MD5");
+	          messageDigest.reset();
+	          messageDigest.update(str.getBytes("UTF-8"));
+	      } catch (NoSuchAlgorithmException e) {
+	          return str;
+	      } catch (UnsupportedEncodingException e) {
+	          return str;
+	      }
+
+	      byte[] byteArray = messageDigest.digest();
+	      StringBuffer md5StrBuff = new StringBuffer();
+	      for (int i = 0; i < byteArray.length; i++) {
+	          if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)
+	              md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));
+	          else
+	              md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
+	      }
+	      return md5StrBuff.toString();
+	    }
+		
+		
+		public static void main(String[] args) {
+			
+			System.out.println(md5("appid=12800005&body=201708152159554264000000000&callback_url=http://www.baidu.com&device_info=AND54SDK&mch_app_name=taobao&mchorderid=201708152159554264000000000&notify_url=http://pay.yunxunpay.com/Services/BBPay/BBPayAliCallBack.html&orgOrderNo=201708152159554264000000000&pay_type=pay_alipay_scan&show_url=www.tmall.com&subject=201708152159554264000000000&total_fee=1&ua=Safari17433fb2bb2235d82594eddd3c58943b"));
+		}
+}

+ 16 - 0
book-push/src/main/java/com/book/push/vo/AuthorizerInfo.java

@@ -0,0 +1,16 @@
+package com.book.push.vo;
+
+import lombok.Data;
+
+/**
+ * created in 2021/8/25
+ * Project: book-store
+ *
+ * @author win7
+ */
+@Data
+public class AuthorizerInfo {
+ private String component_appid;
+ private String authorizer_appid;
+ private String authorizer_refresh_token;
+}

+ 19 - 0
book-push/src/main/java/com/book/push/vo/ComponentInfo.java

@@ -0,0 +1,19 @@
+package com.book.push.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+/**
+ * created in 2021/8/25
+ * Project: book-store
+ *
+ * @author win7
+ */
+@Data
+@AllArgsConstructor
+public class ComponentInfo {
+ private String component_appid;
+ private String component_appsecret;
+ private String component_verify_ticket;
+
+}