概述
1. 创建菜单
-
官网
-
接口
// 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/" } ] } ]
-
-
参数说明
参数 是否必须 说明 button 是 一级菜单数组,个数应为1~3个 sub_button 否 二级菜单数组,个数应为1~5个 type 是 菜单的响应动作类型,view表示网页类型,click表示点击类型,miniprogram表示小程序类型 name 是 菜单标题,不超过16个字节,子菜单不超过60个字节 key click等点击类型必须 菜单KEY值,用于消息接口推送,不超过128字节 url view、miniprogram类型必须 网页 链接,用户点击菜单可打开链接,不超过1024字节。 type为miniprogram时,不支持小程序的老版本客户端将打开本url。 media_id media_id类型和view_limited类型必须 调用新增永久素材接口返回的合法media_id appid miniprogram类型必须 小程序的appid(仅认证公众号可配置) pagepath miniprogram类型必须 小程序的页面路径 -
实现
-
请求体
菜单
、菜单按钮
-
菜单
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; }
-
-
application.yml
、WxMenuConfig
程序启动时创建菜单-
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); } } } }
-
-
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. 删除菜单
-
官网
-
代码
@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); }
-
源码
最后
以上就是超级苗条为你收集整理的06. 微信公众号创建、删除菜单的全部内容,希望文章能够帮你解决06. 微信公众号创建、删除菜单所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复