springboot的微信公众号(五)自定义菜单的创建和删除

一般开发中,会开发一个菜单创建和删除的接口,方便修改菜单布局和菜单的内容

先看一下官方文档的介绍

不难看出,创建菜单的接口是post请求,参数是json格式,返回如下

可以通过调用返回结果验证是否创建成功。

/**
	 * 添加微信公众号菜单
	 * @return
	 */
	@RequestMapping(value="/menuAdd",method=RequestMethod.POST)
	public String menuAdd(){
		boolean b = weiXinService.menuAdd();
		if (b) {
			return "success";
		}
		return "unsuccess";
	}

注意在访问这个接口的时候是post请求,还有不要用localhost了,因为已经解析过了,要使用解析后的

我们都知道浏览器一般发送get请求,所以可以使用postman请求工具,具体使用方法自行百度

service里面的menuAdd方法

/**
	 * 添加自定义菜单
	 */
	@Override
	public boolean menuAdd() {
		String url = WeiXinUtil.ADD_MENU_URL.replace("ACCESS_TOKEN", WeiXinUtil.getAccessToken());
		String menu = JSONObject.fromObject(MsgUtil.initMenu()).toString();
		JSONObject result = HttpUtil.doPoststr(url,menu);
		if("ok".equals(result.getString("errmsg"))){
        	logger.info("添加菜单结果:{}", result);
        	return true;
        }
        logger.info("添加菜单结果:{}", result);
		return false;
	}
//添加菜单接口
	public static final String ADD_MENU_URL = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";

这里面注意将对象转为字符串

请求的menu打印出来一定是跟上面一样的,然后初始化menu,上面的参数不难看出,这里面是一个button数组,然后里面有不同类型的button,我这里全部都封装成了对象

首先:button对象

public class Menu {
	private Button[] button;

	public Button[] getButton() {
		return button;
	}

	public void setButton(Button[] button) {
		this.button = button;
	}
}

然后button对象

public class Button {
	private String type;
	private String name;
	private Button[] sub_button;
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Button[] getSub_button() {
		return sub_button;
	}
	public void setSub_button(Button[] sub_button) {
		this.sub_button = sub_button;
	}
}

这里的button是可能会有子菜单的,所以有个子菜单集合

还有多种按钮类型

我只写了四种菜单类型

//点击菜单
public class ClickButton extends Button{
	private String key;

	public String getKey() {
		return key;
	}

	public void setKey(String key) {
		this.key = key;
	}
}
//发送位置
public class SendLocalButton extends Button{
	private String key;

	public String getKey() {
		return key;
	}

	public void setKey(String key) {
		this.key = key;
	}
}
//相册选中图片或者拍照
public class SendPicButton extends Button{
	private String key;

	public String getKey() {
		return key;
	}

	public void setKey(String key) {
		this.key = key;
	}
}
//普通的视图
public class ViewButton extends Button{
	private String url;

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}
}

最后一个基本都会用到,比如你要跳转一个项目,直接就把项目地址放到url里面即可

最后:菜单初始化方法

也就是往菜单赋值

/**
	 * 组装菜单
	 * @return
	 */
	public static Menu initMenu(){
		Menu menu = new Menu();
		ViewButton button11 = new ViewButton();
		//注意按钮名字不要太长,不然会报40018错误
		button11.setName("搜索");
		button11.setType("view");
		button11.setUrl("https://www.baidu.com");
		//注意链接不要少了https://  否则会报错40055
		
		SendPicButton button21 = new SendPicButton();
		button21.setName("发图");
		button21.setType("pic_photo_or_album");
		button21.setKey("pic");
		
		SendLocalButton button32 = new SendLocalButton();
		button32.setName("发位置");
		button32.setType("location_select");
		button32.setKey("local");
		
		ClickButton button31 = new ClickButton();
		button31.setName("点赞");
		button31.setType("click");
		button31.setKey("strtest");//事件key
		
		Button button = new Button();
		button.setName("click2");
		button.setSub_button(new Button[]{button31,button32});
		button.setSub_button(new Button[]{button31,button32});
		
		menu.setButton(new Button[]{button11,button21,button});
		return menu;
	}

使用postman发送请求,请求成功,关注微信公众号,即可发现公众号的菜单改变

注意:如果你之前关注过你的公众号,需要取消然后再关注才能显示

 

 

然后是菜单删除接口

/**
	 * 删除菜单
	 */
	@Override
	public boolean deleteMenu() {
		String url = WeiXinUtil.DELETE_MENU_URL.replace("ACCESS_TOKEN", WeiXinUtil.getAccessToken());
		JSONObject result = HttpUtil.doGetstr(url);
        if("ok".equals(result.getString("errmsg"))){
        	logger.info("删除菜单结果:{}", result);
        	return true;
        }
        logger.info("删除菜单结果:{}", result);
		return false;
	}
//删除菜单接口
	public static final String DELETE_MENU_URL = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN";
	

这个相对比较简单,是get请求

 

当然也有查询接口等,这个我没有过多研究,有兴趣的可以自行研究

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值