Explorar o código

add(backend) [公众号菜单sql]

wangxiao %!s(int64=4) %!d(string=hai) anos
pai
achega
f85bf3d61e

+ 18 - 0
operation-backend/src/main/java/com/idiot/operationbackend/controller/interactive/AccountMenuController.java

@@ -109,6 +109,24 @@ public class AccountMenuController {
         return ResponseEntity.ok(JsonResult.success(editResult));
     }
 
+
+    @DeleteMapping("/{accountId}")
+    @ApiOperation(value = "删除公众号菜单")
+    public ResponseEntity<JsonResult<Boolean>> delAccountMenu (@RequestHeader String token,
+                                                               @PathVariable String accountId) {
+
+        String userId = JwtTokenUtil.getUserId(token);
+        List<Account> accounts = accountService.queryAccountByUserId(userId);
+        boolean enable = accounts.stream().anyMatch(e->accountId.equals(e.getId()));
+        if (!enable) {
+            throw new CustomException(500,"该公众号不属于您的授权范围");
+        }
+
+        logger.info("用户:{}删除公众号{}菜单信息",userId,accountId);
+        boolean editResult = weChatService.delMenu(accountId);
+        return ResponseEntity.ok(JsonResult.success(editResult));
+    }
+
     @GetMapping("/type")
     @ApiOperation(value = "菜单类型")
     public ResponseEntity<JsonResult<List<MenuType>>> menuType () {

+ 20 - 0
operation-backend/src/main/java/com/idiot/operationbackend/entity/AccountMenu.java

@@ -27,6 +27,10 @@ public class AccountMenu {
 
     private String parentId;
 
+    private String param1;
+
+    private String param2;
+
     @TableField(exist = false)
     private List<AccountMenu> subMenu;
 
@@ -86,4 +90,20 @@ public class AccountMenu {
     public void setSubMenu(List<AccountMenu> subMenu) {
         this.subMenu = subMenu;
     }
+
+    public String getParam1() {
+        return param1;
+    }
+
+    public void setParam1(String param1) {
+        this.param1 = param1;
+    }
+
+    public String getParam2() {
+        return param2;
+    }
+
+    public void setParam2(String param2) {
+        this.param2 = param2;
+    }
 }

+ 15 - 2
operation-backend/src/main/java/com/idiot/operationbackend/service/facade/WeChatService.java

@@ -328,14 +328,27 @@ public interface WeChatService {
     *  创建菜单
     * @author wangxiao
     * @date 11:22 2020/9/22
-    * @param accountMenus
-    * @param accountId
+    * @param accountMenus accountMenus
+    * @param accountId accountId
     * @return boolean
     */
    boolean createMenu(List<AccountMenu> accountMenus,String accountId);
 
 
 
+   /**
+    *  删除菜单
+    * @author wangxiao
+    * @date 11:22 2020/9/22
+    * @param accountId accountId
+    * @return boolean
+    */
+   boolean delMenu(String accountId);
+
+
+
+
+
 
 
   /**

+ 18 - 0
operation-backend/src/main/java/com/idiot/operationbackend/service/impl/WeChatServiceImpl.java

@@ -687,6 +687,18 @@ public class WeChatServiceImpl implements WeChatService, InitializingBean {
     }
 
 
+    @Override
+    public boolean delMenu(String accountId) {
+        String url = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=%s";
+        String accessToken = getAuthorizerAccessToken(accountId);
+        url = String.format(url,accessToken);
+        logger.info("微信删除公众号菜单,accountId:{}----start,时间:{}",accountId,LocalDateTime.now().toString());
+        String jsonStr = restTemplate.getForObject(url,String.class);
+        logger.info("微信创建公众号菜单,accountId:{}----end,时间:{},微信返回:{}",accountId,LocalDateTime.now().toString(),jsonStr);
+        int errcode = JSONObject.parseObject(jsonStr).getIntValue("errcode");
+        return 0 == errcode;
+    }
+
     private String parseToJson (List<AccountMenu> accountMenus) {
         int size  = accountMenus.size();
         JSONObject jsonObject = new JSONObject(1);
@@ -699,6 +711,12 @@ public class WeChatServiceImpl implements WeChatService, InitializingBean {
             temp.put("name",menu.getName());
             if ("media_id".equals(menu.getType()) || "view_limited".equals(type)) {
                 temp.put("media_id",menu.getKey());
+            }else if ("view".equals(type)){
+                temp.put("url",menu.getKey());
+            }else if ("miniprogram".equals(type)) {
+                temp.put("url",menu.getKey());
+                temp.put("appid",menu.getParam1());
+                temp.put("pagepath",menu.getParam2());
             }else {
                 temp.put("key",menu.getKey());
             }

+ 3 - 1
sql/dataBase.sql

@@ -296,7 +296,7 @@ CREATE TABLE `t_qr_code`  (
 -- ----------------------------
 -- Table structure for t_account_menu 公众号菜单
 -- ----------------------------
-DROP TABLE IF EXISTS `t_account_menu`; 
+DROP TABLE IF EXISTS `t_account_menu`;
 CREATE TABLE `t_account_menu`  (
   `id` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'id',
   `account_id` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '公众号id',
@@ -304,6 +304,8 @@ CREATE TABLE `t_account_menu`  (
   `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '名称',
   `key` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT 'key',
   `parent_id` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '上级',
+  `param1` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
+  `param2` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
   PRIMARY KEY (`id`) USING BTREE
 ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;