版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接 ,博主地址:https://blog.csdn.net/qq_31122833。 https://blog.csdn.net/qq_31122833/article/details/83823130
第一步、新建一些实体类:
Menu>Button>ComplexButton>CommonButton
/**
* 菜单
*/
public class Menu {
private Button[] button;
public Button[] getButton() {
return button;
}
public void setButton(Button[] button) {
this.button = button;
}
}
/**
* 按钮的基类
*/
public class Button {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/**
* 复杂按钮(父按钮)
*/
public class ComplexButton extends Button {
private Button[] sub_button;
public Button[] getSub_button() {
return sub_button;
}
public void setSub_button(Button[] sub_button) {
this.sub_button = sub_button;
}
}
/**
* 普通按钮(子按钮)
*/
public class CommonButton extends Button {
private String type;
private String key;
private String url;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
第二步、写组装菜单方法:
其中,
1、btn.setType("view"):是点击按钮实现跳转Url地址
2、btn.setType("click"):是点击按钮实现对应key值的不同处理(由你自己定义做什么事情)
比如:
if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK)) {
// 事件KEY值,与创建自定义菜单时指定的KEY值对应
String eventKey = map.get("EventKey");
if (eventKey.equals("21")) {
logger.info("--学业方面菜单项被点击---openid===="+fromUserName);
message = MessageUtil.textMsg(toUserName, fromUserName, "学业方面菜单项被点击!");
} else if (eventKey.equals("22")) {
message = MessageUtil.textMsg(toUserName, fromUserName, "健康方面菜单项被点击!");
} else if (eventKey.equals("23")) {
message = MessageUtil.textMsg(toUserName, fromUserName, "就业方面菜单项被点击!");
} else if (eventKey.equals("24")) {
message = MessageUtil.textMsg(toUserName, fromUserName, "社交方面菜单项被点击!");
} else if (eventKey.equals("25")) {
message = MessageUtil.textMsg(toUserName, fromUserName, "情感方面菜单项被点击!");
} else if (eventKey.equals("31")) {
message = MessageUtil.textMsg(toUserName, fromUserName, "家庭方面菜单项被点击!");
} else if (eventKey.equals("32")) {
message = MessageUtil.textMsg(toUserName, fromUserName, "经济方面菜单项被点击!");
} else if (eventKey.equals("33")) {
message = MessageUtil.textMsg(toUserName, fromUserName, "幽默笑话菜单项被点击!");
}
}
但是,我这里全部是type=view,也就是点击按钮实现url跳转的,所以这个没有用到。
/**
* 组装菜单数据
* @return
*/
private static Menu getMenu() {
String redirect_uri = "http://www.你的服务器回调地址.com/op/open/openArticle";
CommonButton btn11 = new CommonButton();
btn11.setName("官方网站");
btn11.setType("view");
btn11.setKey("11");
btn11.setUrl("https://www.baidu.com");
CommonButton btn12 = new CommonButton();
btn12.setName("教师入口");
btn12.setType("view");
btn12.setKey("12");
btn12.setUrl("https://www.baidu.com");
CommonButton btn13 = new CommonButton();
btn13.setName("管理入口");
btn13.setType("view");
btn13.setKey("13");
btn13.setUrl("https://www.baidu.com");
CommonButton btn21 = new CommonButton();
btn21.setName("学业方面");
btn21.setType("view");
btn21.setKey("21");
btn21.setUrl(BaseAPI.OPEN_URI+"/connect/oauth2/authorize?appid="+ WeiXinUtil.APPID+"&redirect_uri="+redirect_uri+"?category=1&response_type=code&scope=snsapi_base&state=1#wechat_redirect");
CommonButton btn22 = new CommonButton();
btn22.setName("健康方面");
btn22.setType("view");
btn22.setKey("22");
btn22.setUrl(BaseAPI.OPEN_URI+"/connect/oauth2/authorize?appid="+ WeiXinUtil.APPID+"&redirect_uri="+redirect_uri+"?category=2&response_type=code&scope=snsapi_base&state=1#wechat_redirect");
CommonButton btn23 = new CommonButton();
btn23.setName("就业方面");
btn23.setType("view");
btn23.setKey("23");
btn23.setUrl(BaseAPI.OPEN_URI+"/connect/oauth2/authorize?appid="+ WeiXinUtil.APPID+"&redirect_uri="+redirect_uri+"?category=3&response_type=code&scope=snsapi_base&state=1#wechat_redirect");
CommonButton btn24 = new CommonButton();
btn24.setName("社交方面");
btn24.setType("view");
btn24.setKey("24");
btn24.setUrl(BaseAPI.OPEN_URI+"/connect/oauth2/authorize?appid="+ WeiXinUtil.APPID+"&redirect_uri="+redirect_uri+"?category=5&response_type=code&scope=snsapi_base&state=1#wechat_redirect");
CommonButton btn25 = new CommonButton();
btn25.setName("情感方面");
btn25.setType("view");
btn25.setKey("25");
btn25.setUrl(BaseAPI.OPEN_URI+"/connect/oauth2/authorize?appid="+ WeiXinUtil.APPID+"&redirect_uri="+redirect_uri+"?category=6&response_type=code&scope=snsapi_base&state=1#wechat_redirect");
CommonButton btn31 = new CommonButton();
btn31.setName("家庭方面");
btn31.setType("view");
btn31.setKey("31");
btn31.setUrl(BaseAPI.OPEN_URI+"/connect/oauth2/authorize?appid="+ WeiXinUtil.APPID+"&redirect_uri="+redirect_uri+"?category=7&response_type=code&scope=snsapi_base&state=1#wechat_redirect");
CommonButton btn32 = new CommonButton();
btn32.setName("经济方面");
btn32.setType("view");
btn32.setKey("32");
btn32.setUrl(BaseAPI.OPEN_URI+"/connect/oauth2/authorize?appid="+ WeiXinUtil.APPID+"&redirect_uri="+redirect_uri+"?category=4&response_type=code&scope=snsapi_base&state=1#wechat_redirect");
ComplexButton mainBtn1 = new ComplexButton();
mainBtn1.setName("关于我们");
mainBtn1.setSub_button(new CommonButton[] { btn11, btn12, btn13 });
ComplexButton mainBtn2 = new ComplexButton();
mainBtn2.setName("休闲驿站");
mainBtn2.setSub_button(new CommonButton[] { btn21, btn22, btn23, btn24, btn25 });
ComplexButton mainBtn3 = new ComplexButton();
mainBtn3.setName("更多体验");
mainBtn3.setSub_button(new CommonButton[] { btn31, btn32 });
Menu menu = new Menu();
menu.setButton(new Button[] { mainBtn1, mainBtn2, mainBtn3 });
return menu;
}
/**
* 创建菜单
* @param access_token
* @param menuJson 菜单json 数据
* @return
*/
public static BaseResult menuCreate(String access_token, String menuJson){
HttpUriRequest httpUriRequest = RequestBuilder.post()
.setHeader(jsonHeader).setUri(BASE_URI+"/cgi-bin/menu/create")
.addParameter("access_token", access_token)
.setEntity(new StringEntity(menuJson,Charset.forName("utf-8"))).build();
return LocalHttpClient.executeJsonResult(httpUriRequest,BaseResult.class);
}
/**
* 创建菜单
* @param access_token
* @param menu
* @return
*/
public static BaseResult menuCreate(String access_token,Menu menu){
String str = JsonUtil.toJSONString(menu);
return menuCreate(access_token,str);
}
最后、写个main方法测试一下:
public static void main(String[] args) {
// 调用接口创建菜单
BaseResult res = MenuAPI.menuCreate(你的access_token,MenuAPI.getMenu());
System.out.println(res);
}
返回"ok"表示菜单生成成功!
去你的微信公众号就可以看到效果啦
效果图: