微信公众号开发 自定义菜单创建

接口调用请求说明

http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

正确时的返回JSON数据包如下:

{"errcode":0,"errmsg":"ok"}

错误时的返回JSON数据包如下(示例为无效菜单名长度):

{"errcode":40018,"errmsg":"invalid button name size"}

基于常识,我们知道微信公众号菜单有3层,如图:
这里写图片描述

菜单中还有按钮,按钮点开还有菜单,菜单点开中还有按钮
建立菜单pojo类:

菜单类:

public class Menu {
    private Button[] button;

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

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

按钮基类:

/*
 * 所属:menu
 * 描述:项目下的基类
 */
public class Button {
    private String name;//所有一级菜单、二级菜单都共有一个相同的属性,那就是name


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


}

二级菜单(包含按钮):

public class CommonButton extends Button {
    private String type;
    private String key;

    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 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;
    }

}

按钮点击事件pojo:

/*
 参数                           描述
 ToUserName                 开发者 微信号
 FromUserName               发送方帐号(一个OpenID)
 CreateTime                 消息创建时间 (整型)
 MsgType                    消息类型,event
 Event                      事件类型,CLICK
 EventKey                   事件KEY值,与自定义菜单接口中KEY值对应
 * */
public class MenuClick extends Message {
    private String Event;
    private String EventKey;

    public String getEvent() {
        return Event;
    }

    public void setEvent(String event) {
        Event = event;
    }

    public String getEventKey() {
        return EventKey;
    }

    public void setEventKey(String eventKey) {
        EventKey = eventKey;
    }

}

实例化菜单模板

private static Menu getMenu() {
        CommonButton btn11 = new CommonButton();
        btn11.setName("授权邀请");
        btn11.setType("click");
        btn11.setKey("11");

        CommonButton btn12 = new CommonButton();
        btn12.setName("信息查询");
        btn12.setType("click");
        btn12.setKey("12");

        CommonButton btn13 = new CommonButton();
        btn13.setName("漏洞搜索");
        btn13.setType("click");
        btn13.setKey("13");

        CommonButton btn31 = new CommonButton();
        btn31.setName("天气查询");
        btn31.setType("click");
        btn31.setKey("31");

        CommonButton btn32 = new CommonButton();
        btn32.setName("电影排行榜");
        btn32.setType("click");
        btn32.setKey("32");

        CommonButton btn33 = new CommonButton();
        btn33.setName("幽默笑话");
        btn33.setType("click");
        btn33.setKey("33");

        /**
         * 微信: mainBtn1,mainBtn2底部的2个一级菜单。
         */

        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[] { btn31, btn32, btn33 });

        /**
         * 封装整个菜单
         */
        Menu menu = new Menu();
        menu.setButton(new Button[] { mainBtn1,  mainBtn2 });

        return menu;
    }

拿到access_token向微信发请求要求创建菜单:

public static int CreateMenu(Menu menu,String accessToken)
    {
        int result=0;
        String url=menu_create_url.replace("ACCESS_TOKEN", accessToken);
        String jsonMenu=JSONObject.fromObject(menu).toString();
        JSONObject jsonObject=InterfaceUtil.httpRequest(url, "POST", jsonMenu);
        if (null!=jsonObject) {
            if (0!=jsonObject.getInt("errcode")) {
                result=jsonObject.getInt("errcode");
                System.out.println("创建失败!");
            }
        }
        return result;

    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值