소스 검색

fix:公众号授权跳转地址更新

陈长荣 5 달 전
부모
커밋
00faaef484

+ 5 - 47
snowy-web-app/src/main/java/vip/xiaonuo/weixin/gongzhong/config/WxMpConfiguration.java

@@ -4,8 +4,6 @@ import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.api.WxConsts;
-import me.chanjar.weixin.common.bean.menu.WxMenu;
-import me.chanjar.weixin.common.bean.menu.WxMenuButton;
 import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.common.session.WxSessionManager;
 import me.chanjar.weixin.mp.api.WxMpMessageHandler;
@@ -16,13 +14,12 @@ import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
 import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
 import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
 import me.chanjar.weixin.mp.config.impl.WxMpMapConfigImpl;
-import me.chanjar.weixin.mp.enums.WxMpApiUrl;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import vip.xiaonuo.coldchain.modular.alarmuser.entity.AlarmUser;
 import vip.xiaonuo.coldchain.modular.alarmuser.service.AlarmUserService;
 import vip.xiaonuo.coldchain.modular.push.config.PushConfigure;
-import vip.xiaonuo.dev.modular.config.service.DevConfigService;
+import vip.xiaonuo.weixin.gongzhong.service.WxMenuService;
 
 import java.util.Map;
 import java.util.Objects;
@@ -36,7 +33,7 @@ import java.util.Objects;
 public class WxMpConfiguration {
 
     private final PushConfigure properties;
-    private final DevConfigService devConfigService;
+    private final WxMenuService wxMenuService;
     private final AlarmUserService alarmUserService;
 
     @SneakyThrows
@@ -50,49 +47,10 @@ public class WxMpConfiguration {
         WxMpService service = new WxMpServiceImpl();
         service.setWxMpConfigStorage(configStorage);
         //创建菜单
-        service.getMenuService().menuCreate(createMenu());
+        service.getMenuService().menuCreate(wxMenuService.createMenu());
         return service;
     }
 
-    /**
-     * 创建公众号菜单
-     */
-    private WxMenu createMenu() {
-        //小程序
-        WxMenuButton button1 = new WxMenuButton();
-        button1.setType("miniprogram");
-        button1.setName("冷链中心");
-        button1.setAppId(properties.getMiniProgram());
-        button1.setUrl("http://mp.weixin.qq.com");
-        button1.setPagePath("pages/home/home");
-
-        WxMenuButton button2 = new WxMenuButton();
-        button2.setType("click");
-        button2.setName("关于我们");
-        button2.setKey("aboutUs");
-
-        WxMenuButton button3 = new WxMenuButton();
-        button3.setType("view");
-        button3.setName("授权用户");
-        button3.setUrl(getAuthUrl());
-
-        WxMenu wxMenu = new WxMenu();
-        wxMenu.getButtons().add(button1);
-        wxMenu.getButtons().add(button2);
-        wxMenu.getButtons().add(button3);
-
-        return wxMenu;
-    }
-
-    /**
-     * 获取授权地址
-     * @return
-     */
-    private String getAuthUrl() {
-        String redirectUrl = devConfigService.getValueByKey("SNOWY_THIRD_WECHAT_REDIRECT_URL");
-        return String.format(WxMpApiUrl.OAuth2.CONNECT_OAUTH2_AUTHORIZE_URL.getUrl(null),
-                properties.getAppId(), redirectUrl, "snsapi_userinfo", "STATE");
-    }
 
     @Bean
     public WxMpMessageRouter wxMpMessageRouter() {
@@ -109,10 +67,10 @@ public class WxMpConfiguration {
                         if (alarmUser != null) {
                             msg = "【冷链驿站】欢迎回来," + alarmUser.getNickName() + "。";
                             if (Objects.equals("-1", alarmUser.getCreateOrg())) {
-                                msg += "请先<a href=\"" + getAuthUrl() + "\">完善信息</a>";
+                                msg += "请先<a href=\"" + wxMenuService.getAuthUrl() + "\">完善信息</a>";
                             }
                         } else {
-                            msg = "【冷链驿站】为您提供温湿度、二氧化碳等环境监控数据查询及实时报警通知服务。请先<a href=\"" + getAuthUrl() + "\">完善信息</a>";
+                            msg = "【冷链驿站】为您提供温湿度、二氧化碳等环境监控数据查询及实时报警通知服务。请先<a href=\"" + wxMenuService.getAuthUrl() + "\">完善信息</a>";
                         }
 
                         return WxMpXmlOutMessage.TEXT()

+ 3 - 11
snowy-web-app/src/main/java/vip/xiaonuo/weixin/gongzhong/listener/ConfigChangeListener.java

@@ -4,15 +4,12 @@ import cn.hutool.json.JSONArray;
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
-import me.chanjar.weixin.common.bean.menu.WxMenuButton;
 import me.chanjar.weixin.mp.api.WxMpService;
-import me.chanjar.weixin.mp.bean.menu.WxMpMenu;
-import me.chanjar.weixin.mp.enums.WxMpApiUrl;
 import org.springframework.stereotype.Component;
-import vip.xiaonuo.coldchain.modular.push.config.PushConfigure;
 import vip.xiaonuo.common.listener.CommonDataChangeListener;
 import vip.xiaonuo.dev.modular.config.entity.DevConfig;
 import vip.xiaonuo.dev.modular.config.enums.ConfigDataType;
+import vip.xiaonuo.weixin.gongzhong.service.WxMenuService;
 
 import java.util.List;
 import java.util.Optional;
@@ -23,6 +20,7 @@ import java.util.Optional;
 public class ConfigChangeListener implements CommonDataChangeListener {
 
     private final WxMpService wxMpService;
+    private final WxMenuService wxMenuService;
 
     @Override
     public void doAddWithDataIdList(String dataType, List<String> dataIdList) {
@@ -48,13 +46,7 @@ public class ConfigChangeListener implements CommonDataChangeListener {
             // 如果微信重定向地址更新,则更新微信菜单
             Optional<DevConfig> opt = configList.stream().filter(c -> c.getConfigKey().equals("SNOWY_THIRD_WECHAT_REDIRECT_URL")).findAny();
             if (opt.isPresent()) {
-                WxMpMenu wxMpMenu = wxMpService.getMenuService().menuGet();
-                List<WxMenuButton> buttons = wxMpMenu.getMenu().getButtons();
-                String redirectUrl = opt.get().getConfigValue();
-                redirectUrl = String.format(WxMpApiUrl.OAuth2.CONNECT_OAUTH2_AUTHORIZE_URL.getUrl(null),
-                        PushConfigure.getAppId(), redirectUrl, "snsapi_userinfo", "STATE");
-                log.info("微信重定向地址更新 {}", redirectUrl);
-                buttons.get(2).setUrl(redirectUrl);
+                wxMpService.getMenuService().menuCreate(wxMenuService.createMenu());
             }
         }
     }

+ 57 - 0
snowy-web-app/src/main/java/vip/xiaonuo/weixin/gongzhong/service/WxMenuService.java

@@ -0,0 +1,57 @@
+package vip.xiaonuo.weixin.gongzhong.service;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.bean.menu.WxMenu;
+import me.chanjar.weixin.common.bean.menu.WxMenuButton;
+import me.chanjar.weixin.mp.enums.WxMpApiUrl;
+import org.springframework.stereotype.Service;
+import vip.xiaonuo.coldchain.modular.push.config.PushConfigure;
+import vip.xiaonuo.dev.modular.config.service.DevConfigService;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class WxMenuService {
+
+    private final DevConfigService devConfigService;
+
+    /**
+     * 创建公众号菜单
+     */
+    public WxMenu createMenu() {
+        //小程序
+        WxMenuButton button1 = new WxMenuButton();
+        button1.setType("miniprogram");
+        button1.setName("冷链中心");
+        button1.setAppId(PushConfigure.getMiniProgram());
+        button1.setUrl("http://mp.weixin.qq.com");
+        button1.setPagePath("pages/home/home");
+
+        WxMenuButton button2 = new WxMenuButton();
+        button2.setType("click");
+        button2.setName("关于我们");
+        button2.setKey("aboutUs");
+
+        WxMenuButton button3 = new WxMenuButton();
+        button3.setType("view");
+        button3.setName("授权用户");
+        button3.setUrl(getAuthUrl());
+
+        WxMenu wxMenu = new WxMenu();
+        wxMenu.getButtons().add(button1);
+        wxMenu.getButtons().add(button2);
+        wxMenu.getButtons().add(button3);
+
+        return wxMenu;
+    }
+
+    /**
+     * 获取公众号授权跳转地址
+     */
+    public String getAuthUrl() {
+        String redirectUrl = devConfigService.getValueByKey("SNOWY_THIRD_WECHAT_REDIRECT_URL");
+        return String.format(WxMpApiUrl.OAuth2.CONNECT_OAUTH2_AUTHORIZE_URL.getUrl(null),
+                PushConfigure.getAppId(), redirectUrl, "snsapi_userinfo", "STATE");
+    }
+}