微信公众号开发(四)—— 自定义菜单的创建

来源:互联网 发布:按摩棒 知乎 编辑:程序博客网 时间:2024/06/03 16:12

自定义菜单创建接口

1、自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。
2、一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“…”代替。
3、创建自定义菜单后,菜单的刷新策略是,在用户进入公众号会话页或公众号profile页时,如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单,如果菜单有更新,就会刷新客户端的菜单。测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。

1. 根据 XML 消息,创建按钮和菜单的 Po 类

这里写图片描述

根据微信文档,XML 的正确的格式需要包含:最外层是一个菜单类,中间包括着 click 和 view 的按钮类,其他类型做法类似。

创建按钮 Po 类 button

public class Button {    //菜单类型    private String type;    //菜单名称    private String name;    //可以包含多个菜单项(二级菜单数组,个数应为1~5个)

创建 click 和 view 类型的 button

public class ClickButton extends Button{    //click等点击类型必须    private String key;
public class ViewButton extends Button{    //view类型的路径    private String url;

以及最外层的 menu

public class Menu {    //菜单中包含的button    private Button[] button;

2. 组装一个 menu

1、click:点击推事件
用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event 的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互;
2、view:跳转URL
用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页URL,可与网页授权获取用户基本信息接口结合,获得用户基本信息。

按照按钮类型创建相应的菜单,如下:

点击按钮

ClickButton button11 = new ClickButton();        button11.setName("click菜单");        button11.setType("click");        button11.setKey("11");

跳转按钮

ViewButton button21 = new ViewButton();        button21.setName("view菜单");        button21.setType("view");        button21.setUrl("http://www.baidu.com");

菜单包含多层可以嵌套

Button button = new Button();        button.setName("菜单组");        button.setSub_button(new Button[]{button31,button32});  

最后将按钮组装到菜单中

public static Menu initMenu(){        Menu menu = new Menu();        /**        创建需要的按钮        **/        menu.setButton(new Button[]{...添加按钮});        return menu;

3. 创建菜单

public static int createMenu(String token,String menu) throws ParseException, IOException{        int result = 0;        String url = CREATE_MENU_URL.replace("ACCESS_TOKEN", token);        JSONObject jsonObject = doPostStr(url, menu);        if(jsonObject != null){            result = jsonObject.getInt("errcode");        }        return result;    }
public class WeixinTest {    public static void main(String[] args) {        String menu = JSONObject.fromObject(WeiXinUtil.initMenu()).toString();        try {            AccessToken token = WeiXinUtil.getAccessToken();            System.out.println("票据"+token.getToken());            System.out.println("有效时间"+token.getExpiresIn());            int result = WeiXinUtil.createMenu(token.getToken(), menu);            if(result == 0){                System.out.println("创建菜单成功");            }else{                System.out.println("错误码:" + result);            }        } catch (ParseException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

票据
MS_vadelbHZaduVfhzaOIW0rqWB2mbU8tN4vJhUwh6DYmtwsF3VYdRsyNU52CgqyROSI22WHwMmeYe3nW9kausVqCoDs9x1LDKbKYXttXEIN9eeXCP0TBNKegZsygLlATUJgAJAHIX
有效时间7200
创建菜单成功

1 0
原创粉丝点击