我是靠谱客的博主 超级苗条,最近开发中收集的这篇文章主要介绍06. 微信公众号创建、删除菜单,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1. 创建菜单
  1. 官网

  2. 接口

    // post 请求
    https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
    
    • 请求体示例

      [
      {
      "type": "view",
      "name": "百度",
      "url": "http://www.baidu.com"
      },
      {
      "name": "笔记",
      "sub_button": [
      {
      "type": "view",
      "name": "简书",
      "url": "https://www.jianshu.com/"
      },
      {
      "type": "view",
      "name": "CSDN",
      "url": "https://blog.csdn.net/"
      },
      {
      "type": "view",
      "name": "有道云笔记",
      "url": "https://note.youdao.com/signIn/index.html"
      }
      ]
      },
      {
      "name": "娱乐",
      "sub_button": [
      {
      "type": "view",
      "name": "知乎",
      "url": "https://www.zhihu.com/"
      },
      {
      "type": "view",
      "name": "微博",
      "url": "https://passport.weibo.com/"
      },
      {
      "type": "view",
      "name": "京东",
      "url": "https://www.jd.com/"
      },
      {
      "type": "view",
      "name": "淘宝",
      "url": "https://www.taobao.com/"
      },
      {
      "type": "view",
      "name": "哔哩哔哩",
      "url": "https://www.bilibili.com/"
      }
      ]
      }
      ]
      
  3. 参数说明

    参数是否必须说明
    button一级菜单数组,个数应为1~3个
    sub_button二级菜单数组,个数应为1~5个
    type菜单的响应动作类型,view表示网页类型,click表示点击类型,miniprogram表示小程序类型
    name菜单标题,不超过16个字节,子菜单不超过60个字节
    keyclick等点击类型必须菜单KEY值,用于消息接口推送,不超过128字节
    urlview、miniprogram类型必须网页 链接,用户点击菜单可打开链接,不超过1024字节。 type为miniprogram时,不支持小程序的老版本客户端将打开本url。
    media_idmedia_id类型和view_limited类型必须调用新增永久素材接口返回的合法media_id
    appidminiprogram类型必须小程序的appid(仅认证公众号可配置)
    pagepathminiprogram类型必须小程序的页面路径
  4. 实现

    1. 请求体菜单菜单按钮

      • 菜单

        import com.fasterxml.jackson.annotation.JsonProperty;
        import lombok.Data;
        import lombok.ToString;
        import java.io.Serializable;
        import java.util.List;
        /**
        * 微信公众号菜单
        *
        * @author sheng_zs@126.com
        * @date 2021-08-05 14:48
        */
        @Data
        @ToString
        public class WxMenuBean implements Serializable {
        private static final long serialVersionUID = 1L;
        /**
        * 必须<br>
        * 一级菜单数组,个数应为1~3个
        */
        @JsonProperty("button")
        private List<WxMenuButtonBean> buttons;
        }
        
      • 菜单按钮

        import com.fasterxml.jackson.annotation.JsonAlias;
        import com.fasterxml.jackson.annotation.JsonProperty;
        import lombok.Data;
        import lombok.ToString;
        import java.io.Serializable;
        import java.util.List;
        /**
        * 微信公众号菜单按钮
        *
        * @author sheng_zs@126.com
        * @date 2021-08-05 11:43
        */
        @Data
        @ToString
        public class WxMenuButtonBean implements Serializable {
        private static final long serialVersionUID = 1L;
        /**
        * 不必须<br>
        * 二级菜单数组,个数应为1~5个
        */
        @JsonProperty("sub_button")
        @JsonAlias({"subButtons", "sub_button"})
        private List<WxMenuButtonBean> subButtons;
        /**
        * 必须<br>
        * 菜单的响应动作类型,view表示网页类型,click表示点击类型,miniprogram表示小程序类型
        */
        private String type;
        /**
        * 必须<br>
        * 菜单标题,不超过16个字节,子菜单不超过60个字节
        */
        private String name;
        /**
        * click等点击类型必须<br>
        * 菜单KEY值,用于消息接口推送,不超过128字节
        */
        private String key;
        /**
        * view、miniprogram类型必须<br>
        * 网页 链接,用户点击菜单可打开链接,不超过1024字节。 type为miniprogram时,不支持小程序的老版本客户端将打开本url。
        */
        private String url;
        /**
        * media_id类型和view_limited类型必须<br>
        * 调用新增永久素材接口返回的合法media_id
        */
        @JsonProperty("media_id")
        private String mediaId;
        /**
        * miniprogram类型必须<br>
        * 小程序的appid(仅认证公众号可配置)
        */
        @JsonProperty("appid")
        private String appId;
        /**
        * miniprogram类型必须<br>
        * 小程序的页面路径
        */
        @JsonProperty("pagepath")
        private String pagePath;
        }
        
    2. application.ymlWxMenuConfig程序启动时创建菜单

      • application.yml

        wx:
        mp:
        appID: appID
        appSecret: appSecret
        token: token
        encodingAesKey: 43位encodingAesKey
        menu:
        # 是否自动创建
        enable: false
        # 菜单数据
        buttons:
        - {type: 'view' , name: '百度', url: 'http://www.baidu.com'}
        - {name: '笔记',
        subButtons:[{type: 'view', name: '简书', url: 'https://www.jianshu.com/'},
        {type: 'view', name: 'CSDN', url: 'https://blog.csdn.net/'},
        {type: 'view', name: '有道云笔记', url: 'https://note.youdao.com/signIn/index.html'}
        ]
        }
        - {name: '娱乐',
        subButtons:[{type: 'view', name: '知乎', url: 'https://www.zhihu.com/'},
        {type: 'view', name: '微博', url: 'https://passport.weibo.com/'},
        {type: 'view', name: '京东', url: 'https://www.jd.com/'},
        {type: 'view' , name: '淘宝', url: 'https://www.taobao.com/'},
        {type: 'view' , name: '哔哩哔哩', url: 'https://www.bilibili.com/'}
        ]
        }
        
      • WxMenuConfig

        import cn.hutool.http.HttpUtil;
        import com.small.nine.wxmp.common.constant.WxConstant;
        import com.small.nine.wxmp.domain.bean.wx.WxMenuBean;
        import com.small.nine.wxmp.domain.bean.wx.WxMenuButtonBean;
        import com.small.nine.wxmp.service.WxService;
        import com.small.nine.wxmp.utils.wx.JsonUtils;
        import lombok.Data;
        import lombok.extern.slf4j.Slf4j;
        import org.springframework.boot.context.properties.ConfigurationProperties;
        import org.springframework.context.annotation.Configuration;
        import javax.annotation.PostConstruct;
        import javax.annotation.Resource;
        import java.util.List;
        import java.util.Map;
        import java.util.Objects;
        /**
        * 微信菜单
        *
        * @author sheng_zs@126.com
        * @date 2021-08-05 14:55
        */
        @Slf4j
        @Data
        @Configuration
        @ConfigurationProperties("wx.menu")
        public class WxMenuConfig {
        /**
        * 是否自动创建
        */
        private Boolean enable;
        /**
        * 菜单
        */
        private List<WxMenuButtonBean> buttons;
        @Resource
        private WxService wxService;
        /**
        * 创建菜单
        */
        @PostConstruct
        private void createMenu() {
        if (Objects.equals(enable, true)) {
        WxMenuBean menuBean = new WxMenuBean();
        menuBean.setButtons(buttons);
        // 创建菜单
        String body = JsonUtils.writeValueAsString(menuBean);
        String post = HttpUtil.post(String.format(WxConstant.URL_MENU_CREATE_POST, wxService.getAccessToken()), body);
        log.info("自动创建微信公众号菜单n{}n创建信息:{}", body, post);
        Map<String, Object> map = JsonUtils.readValueAsMap(post);
        Object errCode;
        if (Objects.isNull(map) || Objects.isNull(errCode = map.get("errcode")) || !Objects.equals(errCode, 0)) {
        throw new RuntimeException("自动创建微信公众号菜单错误:" + post);
        }
        }
        }
        }
        
    3. serviceImpl

      @Override
      public Map<String, Object> createMenu(List<WxMenuButtonBean> beans) {
      WxMenuBean menuBean = new WxMenuBean();
      menuBean.setButtons(beans);
      // 创建菜单
      String body = JsonUtils.writeValueAsString(menuBean);
      String post = HttpUtil.post(String.format(WxConstant.URL_MENU_CREATE_POST, getAccessToken()), body);
      log.info("创建微信公众号菜单n{}n创建信息:{}", body, post);
      return JsonUtils.readValueAsMap(post);
      }
      
2. 删除菜单
  1. 官网

  2. 代码

    @Override
    public Map<String, Object> deleteMenu() {
    String result = HttpUtil.get(String.format(WxConstant.URL_MENU_DELETE_GET, getAccessToken()));
    log.info("n删除微信公众号菜单{}", result);
    return JsonUtils.readValueAsMap(result);
    }
    
  3. 源码

最后

以上就是超级苗条为你收集整理的06. 微信公众号创建、删除菜单的全部内容,希望文章能够帮你解决06. 微信公众号创建、删除菜单所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部