Java - 微信公众号 - 自定义菜单栏

事先声明:自定义菜单这块我把它独立出来了,当然,这毕竟只是个测试

 

  1、首先需要在上一篇(消息回复)的工具类WeixinUtil当中添加创建菜单的方法

    

/**
     * 创建菜单
     * @param menu
     * @param accessToken
     * @return
     */
    public static int createMenu(Menu menu, String accessToken) {
        
        String menu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";
        
        int result = 0;
        // 拼装创建菜单的url
        String url = menu_create_url.replace("ACCESS_TOKEN", accessToken);
        // 将菜单对象转换成json字符串
        String jsonMenu = JSONObject.fromObject(menu).toString();
        // 调用接口创建菜单
        JSONObject jsonObject = httpRequest(url, "POST", jsonMenu);
        if (null != jsonObject) {
            if (0 != jsonObject.getInt("errcode")) {
                result = jsonObject.getInt("errcode");
                log.error("创建菜单失败 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg"));
            }
        }

        return result;
    }

 

    必要的实体类肯定不能少了,贴上、、贴上、、

 

/**
 * 整个菜单对象的封装
 * @author xzl
 *
 */
public class Menu {

    private Button[] button;

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

    
    public void setButton(Button[] button) {
        this.button = button;
    }
}
Menu
/**
 * 菜单项的基类
 * @author xzl
 *
 */
public class Button {

    private String name;

    
    public String getName() {
        return name;
    }

    
    public void setName(String name) {
        this.name = name;
    }
    
}
Button
/**
 * 是一级菜单还是二级菜单就看你如何封装菜单
 * @author xzl
 *
 */
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;
    }
}
CommonButton
/**
 * 顶级菜单 :含有菜单子项
 * @author xzl
 *
 */
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;
    }
}
ComplexButton

 

    继续走流程。。

public class MenuCreate {

    private static Logger log = LoggerFactory.getLogger(MenuCreate.class);
    
    private static final String appid = "wx7b43df48d97fab9d";
    private static final String appSecret = "5a91fcdb64e379856b2a7b3c67a9cb90";

    public static void main(String[] args) {

        // 调用接口获取access_token
        AccessToken at = WeixinUtil.getAccessToken(appid, appSecret);

        if (null != at) {
            // 调用接口创建菜单
            int result = WeixinUtil.createMenu(getMenu(), at.getAccessToken());

            // 判断菜单创建结果
            if (0 == result) {
                System.out.println("菜单创建成功!");
                log.info("菜单创建成功!");
            } else {
                System.out.println("菜单创建失败,错误码:" + result);
                log.info("菜单创建失败,错误码:" + result);
            }
        }else{
            System.out.println("获取token失败!");
            log.info("获取token失败!");
        }
    }

    /**
     * 组装菜单数据
     * 
     * @return
     */
    private static Menu getMenu() {
        CommonButton btn1 = new CommonButton();
        btn1.setName("博客园");
        btn1.setType("view");
        btn1.setUrl("http://www.cnblogs.com/x-99/");
        
        CommonButton btn2 = new CommonButton();
        btn2.setName("我的博客");
        btn2.setType("view");
        btn2.setUrl("http://www.cnblogs.com/x-99/");

        CommonButton btn3 = new CommonButton();
        btn3.setName("个人中心");
        btn3.setType("view");
        btn3.setUrl("http://www.cnblogs.com/x-99/");

        CommonButton btn4 = new CommonButton();
        btn4.setName("人工服务");
        btn4.setType("view");
        btn4.setUrl("http://www.cnblogs.com/x-99/");

        CommonButton btn5 = new CommonButton();
        btn5.setName("附近美食");
        btn5.setType("click");
        btn5.setKey("23");

        CommonButton btn6 = new CommonButton();
        btn6.setName("周边住宿");
        btn6.setType("click");
        btn6.setKey("24");
        

        ComplexButton mainBtn1 = new ComplexButton();
        mainBtn1.setName("博客概况");
        mainBtn1.setSub_button(new CommonButton[] { btn2, btn3, btn4 });

        ComplexButton mainBtn2 = new ComplexButton();
        mainBtn2.setName("周边服务");
        mainBtn2.setSub_button(new CommonButton[] { btn5, btn6 });

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

        return menu;
    }
}

 

    如果你确认你的appid和appSecret没有填错的话,应该就没有什么太大的问题了

 

    以上就是我对自定义菜单的理解,希望可以帮到大家。。。

 

posted on 2017-09-14 18:04  IT-Dream  阅读(441)  评论(0)    收藏  举报

导航