zoukankan      html  css  js  c++  java
  • 微信公众号开发(四)—— 自定义菜单的创建

    自定义菜单创建接口

    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
    创建菜单成功

  • 相关阅读:
    从Android Launcher源码学习自定义标签
    Android的TextView使用Html来处理图片显示、字体样式、超链接等
    mysql的字符串函数
    JavaScript求当月天数
    keycode对照表
    Android onMeasure方法介绍
    SpannableString或SpannableStringBuilder以及string.xml文件中的整型和string型代替
    表单的内容用WORD形式保存
    在LOTUS NOTES 中通过ODBC访问关系数据库的方法
    通过LEI技术实现NOTES与SQL2000数据交换
  • 原文地址:https://www.cnblogs.com/shuiyj/p/13185241.html
Copyright © 2011-2022 走看看