自定义菜单
按照微信文档的说话,一级菜单最多三个,二级菜单最多5个,并且有多种类型按钮以下只实现三种按钮:click,viiew,pic_photo_or_album
微信官方文档
实现步骤:
1.根据文档给出的请求示例,创建各个按钮的java对象
2.通过JSONObject将java对象转换成json数据格式
3.通过文档给出的接口将json数据发送到公众号的前台
注:
1.必须先创建接口,才能个性化菜单接口
2.如果出现{"errcode":40024,"errmsg":"invalid sub button type rid: 604839f8-7b5da5be-69c27eef"},
说明按钮的实例对象属性写错,建议对照文档仔细检查
具体代码:(所有java实例对象都省略set,get)
public class Button {
private List<AbstractButton> button = new ArrayList<>();
}
public abstract class AbstractButton {
private String name;
}
public class ClickButton extends AbstractButton{
private String type="click";
private String key;
public ClickButton(String name, String key) {
super(name);
this.key = key;
}
}
public class SubButton extends AbstractButton {
private List<AbstractButton> sub_button = new ArrayList<>();
}
public class ViewButton extends AbstractButton {
private String type="view";
private String url;
public ViewButton(String name, String url) {
super(name);
this.url = url;
}
}
public class CreatMeuUtil {
public static void main(String[] args) {
Button btn = new Button();
btn.getButton().add(new ClickButton("一级点击","1"));
btn.getButton().add(new ViewButton("一级跳转","http://www.baidu.com"));
SubButton sb = new SubButton("有子菜单");
sb.getSub_button().add(new PhotoOrAlbumButton("传图","31"));
sb.getSub_button().add(new ClickButton("点击","32"));
sb.getSub_button().add(new ViewButton("去网易","http://news.163.com"));
btn.getButton().add(sb);
JSONObject jsonObject = JSONObject.fromObject(btn);
System.out.println(jsonObject.toString());
String url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";
url = url.replace("ACCESS_TOKEN", WxService.getAccessToken());
String result = Util.post(url,jsonObject.toString());
System.out.println(result);
}
}
private static BaseMessage dealEvent(Map<String, String> requestMap) {
String event = requestMap.get("Event");
switch (event){
case "CLICK":
return dealClick(requestMap);
case "VIEW":
return dealView(requestMap);
}
return null;
}
private static BaseMessage dealView(Map<String, String> requestMap) {
return null;
}
private static BaseMessage dealClick(Map<String, String> requestMap) {
String key = requestMap.get("EventKey");
switch (key){
case "1":
return new TextMessage(requestMap,"你点了第一个一级菜单");
case "32":
break;
default:
break;
}
return null;
}