From fe5f36186dd2f94082acbaa687ef0a220645cec1 Mon Sep 17 00:00:00 2001 From: zeek <984294471@qq.com> Date: Sat, 21 Mar 2020 18:29:30 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solo/wechat/conf/WeChatBeans.java | 15 ++--- ...XinConfigure.java => WeChatConfigure.java} | 2 +- .../wechat/controller/WeXinController.java | 18 ++++-- .../wechat/service/WeChatMenuService.java | 10 ++- .../wechat/service/WeChatMenuServiceImpl.java | 64 ++++++++++++++++++- .../zeekling/solo/wechat/util/FileUtils.java | 6 +- .../solo/wechat/utils/FileUtilsTest.java | 21 ++++++ 7 files changed, 116 insertions(+), 20 deletions(-) rename src/main/java/com/zeekling/solo/wechat/conf/{WeXinConfigure.java => WeChatConfigure.java} (97%) create mode 100644 src/test/java/com/zeekling/solo/wechat/utils/FileUtilsTest.java diff --git a/src/main/java/com/zeekling/solo/wechat/conf/WeChatBeans.java b/src/main/java/com/zeekling/solo/wechat/conf/WeChatBeans.java index e764fc0..8f45cfd 100644 --- a/src/main/java/com/zeekling/solo/wechat/conf/WeChatBeans.java +++ b/src/main/java/com/zeekling/solo/wechat/conf/WeChatBeans.java @@ -5,15 +5,12 @@ import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl; import me.chanjar.weixin.mp.config.WxMpConfigStorage; import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl; -import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; import javax.annotation.Resource; import java.util.HashMap; import java.util.Map; -import java.util.stream.Collectors; /** * @author zeekling [lingzhaohui@zeekling.cn] @@ -26,18 +23,18 @@ import java.util.stream.Collectors; public class WeChatBeans { @Resource - private WeXinConfigure weXinConfigure; + private WeChatConfigure weChatConfigure; @Bean public WxMpService wxMpService() { WxMpService service = new WxMpServiceImpl(); WxMpDefaultConfigImpl configStorage = new WxMpDefaultConfigImpl(); - configStorage.setAppId(weXinConfigure.getAppId()); - configStorage.setSecret(weXinConfigure.getSecret()); - configStorage.setToken(weXinConfigure.getToken()); - configStorage.setAesKey(weXinConfigure.getAesKey()); + configStorage.setAppId(weChatConfigure.getAppId()); + configStorage.setSecret(weChatConfigure.getSecret()); + configStorage.setToken(weChatConfigure.getToken()); + configStorage.setAesKey(weChatConfigure.getAesKey()); Map configStorageMap = new HashMap<>(); - configStorageMap.put(weXinConfigure.getAppId(), configStorage); + configStorageMap.put(weChatConfigure.getAppId(), configStorage); service.setMultiConfigStorages(configStorageMap); return service; } diff --git a/src/main/java/com/zeekling/solo/wechat/conf/WeXinConfigure.java b/src/main/java/com/zeekling/solo/wechat/conf/WeChatConfigure.java similarity index 97% rename from src/main/java/com/zeekling/solo/wechat/conf/WeXinConfigure.java rename to src/main/java/com/zeekling/solo/wechat/conf/WeChatConfigure.java index 1b1413c..fb203c3 100644 --- a/src/main/java/com/zeekling/solo/wechat/conf/WeXinConfigure.java +++ b/src/main/java/com/zeekling/solo/wechat/conf/WeChatConfigure.java @@ -10,7 +10,7 @@ import org.springframework.stereotype.Component; * @since 2020-03-18 */ @Component -public class WeXinConfigure { +public class WeChatConfigure { private String appId; diff --git a/src/main/java/com/zeekling/solo/wechat/controller/WeXinController.java b/src/main/java/com/zeekling/solo/wechat/controller/WeXinController.java index ee51019..b3ce024 100644 --- a/src/main/java/com/zeekling/solo/wechat/controller/WeXinController.java +++ b/src/main/java/com/zeekling/solo/wechat/controller/WeXinController.java @@ -1,7 +1,8 @@ package com.zeekling.solo.wechat.controller; -import com.zeekling.solo.wechat.conf.WeXinConfigure; +import com.zeekling.solo.wechat.conf.WeChatConfigure; import com.zeekling.solo.wechat.entity.Validate; +import com.zeekling.solo.wechat.service.WeChatMenuService; import com.zeekling.solo.wechat.verify.SHA1; import me.chanjar.weixin.mp.api.WxMpService; import org.slf4j.Logger; @@ -23,14 +24,14 @@ public class WeXinController { private Logger logger = LoggerFactory.getLogger(getClass()); @Resource - private WeXinConfigure wechatConfig; + private WeChatConfigure weChatConfigure; @Resource - private WxMpService wxMpService; + private WeChatMenuService weChatMenuService; @RequestMapping(value = "/validate") public String validate(Validate validate) { - String token = wechatConfig.getToken(); + String token = weChatConfigure.getToken(); String signature = SHA1.getSHA1(token, validate.getTimestamp(), validate.getNonce()); // 3.字符串校验 if (validate.getSignature().equals(signature)) { @@ -43,8 +44,15 @@ public class WeXinController { } } + @RequestMapping(value = "/menu/create") + public String createMenu(){ + return this.weChatMenuService.create(); + } - + @RequestMapping(value = "/menu/get") + public String getMenu(){ + return this.weChatMenuService.get(); + } } diff --git a/src/main/java/com/zeekling/solo/wechat/service/WeChatMenuService.java b/src/main/java/com/zeekling/solo/wechat/service/WeChatMenuService.java index 1878073..8d87ec9 100644 --- a/src/main/java/com/zeekling/solo/wechat/service/WeChatMenuService.java +++ b/src/main/java/com/zeekling/solo/wechat/service/WeChatMenuService.java @@ -8,6 +8,14 @@ package com.zeekling.solo.wechat.service; */ public interface WeChatMenuService { - + /** + * 根据配置文件menu.json文件创建对应的菜单 + * + * @return 创建菜单是否成功 + */ + String create(); + + String get(); + } diff --git a/src/main/java/com/zeekling/solo/wechat/service/WeChatMenuServiceImpl.java b/src/main/java/com/zeekling/solo/wechat/service/WeChatMenuServiceImpl.java index 81161fa..c892af0 100644 --- a/src/main/java/com/zeekling/solo/wechat/service/WeChatMenuServiceImpl.java +++ b/src/main/java/com/zeekling/solo/wechat/service/WeChatMenuServiceImpl.java @@ -1,16 +1,78 @@ package com.zeekling.solo.wechat.service; +import com.zeekling.solo.wechat.conf.WeChatConfigure; +import com.zeekling.solo.wechat.util.FileUtils; +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.mp.api.WxMpService; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; /** * @author zeekling [lingzhaohui@zeekling.cn] * @version 1.0 - * @apiNote + * @apiNote 微信菜单相关处理 * @since 2020-03-21 */ @Service public class WeChatMenuServiceImpl implements WeChatMenuService { + private static final Logger LOG = LoggerFactory.getLogger(WeChatMenuServiceImpl.class); + + @Resource + private WxMpService wxMpService; + + @Resource + private WeChatConfigure weChatConfigure; + + private JSONObject menuInfo = null; + + + @PostConstruct + private void init(){ + menuInfo = FileUtils.readJsonFile(weChatConfigure.getMenuFilePath()); + this.wxMpService.switchover(weChatConfigure.getAppId()); + } + + @Override + public String create() { + if (menuInfo == null){ + return "{}"; + } + try { + JSONArray buttonArray = menuInfo.getJSONArray("button"); + if (buttonArray == null || buttonArray.length() == 0){ + return "{}"; + } + return this.wxMpService.getMenuService().menuCreate(menuInfo.toString()); + } catch (JSONException | WxErrorException e) { + LOG.warn("error in create menu, error:{}", e); + } + + return "{}"; + } + + @Override + public String get() { + + try { + return this.wxMpService.getMenuService().menuGet().toJson(); + } catch (WxErrorException e) { + e.printStackTrace(); + } + return null; + } } diff --git a/src/main/java/com/zeekling/solo/wechat/util/FileUtils.java b/src/main/java/com/zeekling/solo/wechat/util/FileUtils.java index 5416f01..c358763 100644 --- a/src/main/java/com/zeekling/solo/wechat/util/FileUtils.java +++ b/src/main/java/com/zeekling/solo/wechat/util/FileUtils.java @@ -27,7 +27,7 @@ public final class FileUtils { * @param filePath 文件地址 * @return 文件内容 */ - public String readFile(String filePath) { + public static String readFile(String filePath) { StrBuilder sb = new StrBuilder(); byte[] buffer = new byte[1024]; try { @@ -49,7 +49,7 @@ public final class FileUtils { * @param filePath 文件路径 * @return 转换后的json对象 */ - public JSONObject readJsonFile(String filePath) { + public static JSONObject readJsonFile(String filePath) { String str = readFile(filePath); try { @@ -57,7 +57,7 @@ public final class FileUtils { } catch (Exception e) { LOG.warn("str to json error,str:{}, error:{}", str, e); } - return null; + return new JSONObject(); } } diff --git a/src/test/java/com/zeekling/solo/wechat/utils/FileUtilsTest.java b/src/test/java/com/zeekling/solo/wechat/utils/FileUtilsTest.java new file mode 100644 index 0000000..be608e7 --- /dev/null +++ b/src/test/java/com/zeekling/solo/wechat/utils/FileUtilsTest.java @@ -0,0 +1,21 @@ +package com.zeekling.solo.wechat.utils; + +import com.zeekling.solo.wechat.util.FileUtils; +import org.junit.Test; + +/** + * @author zeekling [lingzhaohui@zeekling.cn] + * @version 1.0 + * @apiNote + * @since 2020-03-21 + */ +public class FileUtilsTest { + + + @Test + public void readJsonFile(){ + String filePath = "/home/zeek/project/solo-weixin/src/main/resources/menu.json"; + System.out.println(FileUtils.readJsonFile(filePath).toString()); + } + +}