微信开发九 自定义菜单

本例中有些引用的类与方法不做过多介绍,之后会提供完整源码下载,请自行查看。

本篇根据开发者文档-自定义菜单编写。请对照查看,一些传入与返回参数就不过多介绍。地址为:https://mp.weixin.qq.com/wiki/5/0d8acdd6d4433c877fbea938a2f133cd.html


/*
 * 自定义菜单
 * https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141013&token=&lang=zh_CN
 */
public class CustomMenu {

    private List<Button> button; //一级菜单数组,个数应为1~3个

    public List<Button> getButton() {
        if(button == null) button = new ArrayList<Button>();
        return button;
    }
    public void setButton(List<Button> button) {
        this.button = button;
    }

    public class Button {
        private String type ;           //必须。菜单的响应动作类型
        private String name ;           //必须。菜单标题,不超过16个字节,子菜单不超过60个字节
        private String key ;            //click等点击类型必须  菜单KEY值,用于消息接口推送,不超过128字节
        private String url ;            //view类型必须      网页链接,用户点击菜单可打开链接,不超过1024字节
        private String media_id ;       //media_id类型和view_limited类型必须       调用新增永久素材接口返回的合法media_id
        private List<SubButton> sub_button = new ArrayList<SubButton>(); //二级菜单数组,个数应为1~5个

        public String getType() {
            return type;
        }
        public void setType(String type) {
            this.type = type;
        }

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

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

        public String getMedia_id() {
            return media_id;
        }
        public void setMedia_id(String media_id) {
            this.media_id = media_id;
        }

        public List<SubButton> getSub_button() {
            return sub_button;
        }
        public void setSub_button(List<SubButton> sub_button) {
            this.sub_button = sub_button;
        }

        public class SubButton {
            private String type ;           //必须。菜单的响应动作类型
            private String name ;           //必须。菜单标题,不超过16个字节,子菜单不超过60个字节
            private String key ;            //click等点击类型必须  菜单KEY值,用于消息接口推送,不超过128字节
            private String url ;            //view类型必须      网页链接,用户点击菜单可打开链接,不超过1024字节
            private String media_id ;       //media_id类型和view_limited类型必须       调用新增永久素材接口返回的合法media_id

            public String getType() {
                return type;
            }
            public void setType(String type) {
                this.type = type;
            }

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

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

            public String getMedia_id() {
                return media_id;
            }
            public void setMedia_id(String media_id) {
                this.media_id = media_id;
            }
        }
    }
}
public interface MenuService {

    //创建自定义菜单
    public String createCustomMenu(CustomMenu customMenu);

    //查询自定义菜单
    public String getCustomMenu();

    //删除自定义菜单
    public String deleteCustomMenu();

    //创建个性化菜单
    public String addConditional(PersonaliseMenu personaliseMenu);

    //删除个性化菜单
    public String delConditional(PersonaliseMenu personaliseMenu);

    //测试个性化菜单匹配结果
    public String testConditional(PersonaliseMenu personaliseMenu);
}
@Service("menuService")
public class MenuServiceImpl implements MenuService {

    private static final Logger logger = Logger.getLogger(MenuServiceImpl.class);

    @Override
    public String createCustomMenu(CustomMenu customMenu) {
        logger.info("==========createCustomMenu===========");
        String url = WeChatInterface.CREATE_CUSTOM_MENU.replace("ACCESS_TOKEN", WeChatCertificate.WECHAT_ACCESSTOKEN);
        return JsonUtil.getResp(url, "POST", new Gson().toJson(customMenu));
    }

    @Override
    public String getCustomMenu() {
        logger.info("==========getCustomMenu===========");
        String url = WeChatInterface.GET_CUSTOM_MENU.replace("ACCESS_TOKEN", WeChatCertificate.WECHAT_ACCESSTOKEN);
        return HttpUtil.getStringByGet(url);
    }

    @Override
    public String deleteCustomMenu() {
        logger.info("==========deleteCustomMenu===========");
        String url = WeChatInterface.DELETE_CUSTOM_MENU.replace("ACCESS_TOKEN", WeChatCertificate.WECHAT_ACCESSTOKEN);
        return HttpUtil.getStringByGet(url);
    }

    @Override
    public String addConditional(PersonaliseMenu personaliseMenu) {
        logger.info("==========addConditional===========");
        String url = WeChatInterface.ADD_CONDITIONAL.replace("ACCESS_TOKEN", WeChatCertificate.WECHAT_ACCESSTOKEN);
        return JsonUtil.getResp(url, "POST", new Gson().toJson(personaliseMenu));
    }

    @Override
    public String delConditional(PersonaliseMenu personaliseMenu) {
        logger.info("==========delConditional===========");
        String url = WeChatInterface.DELETE_CONDITIONAL.replace("ACCESS_TOKEN", WeChatCertificate.WECHAT_ACCESSTOKEN);
        return JsonUtil.getResp(url, "POST", new Gson().toJson(personaliseMenu));
    }

    @Override
    public String testConditional(PersonaliseMenu personaliseMenu) {
        logger.info("==========testConditional===========");
        String url = WeChatInterface.TEST_CONDITIONAL.replace("ACCESS_TOKEN", WeChatCertificate.WECHAT_ACCESSTOKEN);
        return JsonUtil.getResp(url, "POST", new Gson().toJson(personaliseMenu));
    }
}
@RunWith(SpringJUnit4ClassRunner.class)        // 表示继承了 SpringJUnit4ClassRunner 类
@ContextConfiguration("classpath:spring-mybatis.xml")
public class TestWXCustomMenu {

    @Resource   
    private MenuService menuService;

//  @Test
    public void createCustomMenu() {
        //click类型必须带Key。view类型必须带Url。
        CustomMenu customMenu = new CustomMenu();
        CustomMenu.Button button1 = customMenu.new Button();
        button1.setType("click");
        button1.setName("按钮1");
        button1.setKey("ID10010");
        CustomMenu.Button button2 = customMenu.new Button();
        button2.setType("click");
        button2.setName("按钮2");
        button2.setKey("ID10020");
        CustomMenu.Button button3 = customMenu.new Button();
        button3.setName("菜单");
        CustomMenu.Button.SubButton subButton1 = button3.new SubButton();
        subButton1.setType("view");
        subButton1.setName("百度");
        subButton1.setUrl("http://www.baidu.com/");
        CustomMenu.Button.SubButton subButton2 = button3.new SubButton();
        subButton2.setType("view");
        subButton2.setName("好123");
        subButton2.setUrl("http://www.hao123.com/");
        CustomMenu.Button.SubButton subButton3 = button3.new SubButton();
        subButton3.setType("view");
        subButton3.setName("微信JS-SDK测试");
        subButton3.setUrl("http://115.28.174.212/WeChat/wx/testWXJS");
        button3.getSub_button().add(subButton1);
        button3.getSub_button().add(subButton2);
        button3.getSub_button().add(subButton3);
        customMenu.getButton().add(button1);
        customMenu.getButton().add(button2);
        customMenu.getButton().add(button3);
      System.out.println(">>>"+menuService.createCustomMenu(customMenu));
    }

    @Test
    public void getCustomMenu() {
        System.out.println(">>>"+menuService.getCustomMenu());
    }

//  @Test
    public void deleteCustomMenu() {
        System.out.println(">>>"+menuService.deleteCustomMenu());
    }

//  @Test
    public void addConditional() {
        //click类型必须带Key。view类型必须带Url。
        PersonaliseMenu personaliseMenu = new PersonaliseMenu();
        PersonaliseMenu.Button button1 = personaliseMenu.new Button();
        button1.setType("click");
        button1.setName("点击按钮1");
        button1.setKey("ID10010");
        PersonaliseMenu.Button button2 = personaliseMenu.new Button();
        button2.setType("click");
        button2.setName("点击按钮2");
        button2.setKey("ID10020");
        PersonaliseMenu.Button button3 = personaliseMenu.new Button();
        button3.setName("菜单");
        PersonaliseMenu.Button.SubButton subButton1 = button3.new SubButton();
        subButton1.setType("view");
        subButton1.setName("百度");
        subButton1.setUrl("http://www.baidu.com/");
        PersonaliseMenu.Button.SubButton subButton2 = button3.new SubButton();
        subButton2.setType("view");
        subButton2.setName("好123");
        subButton2.setUrl("http://www.hao123.com/");
        button3.getSub_button().add(subButton1);
        button3.getSub_button().add(subButton2);
        personaliseMenu.getButton().add(button1);
        personaliseMenu.getButton().add(button2);
        personaliseMenu.getButton().add(button3);

        //以下信息由 用户标签管理接口获取
        PersonaliseMenu.MatchRule matchRule = personaliseMenu.new MatchRule(); 
        matchRule.setTag_id("101");
        matchRule.setSex(PersonaliseMenu.MAN);
        matchRule.setClient_platform_type(PersonaliseMenu.OTHERS);
        matchRule.setCountry("中国");
        matchRule.setProvince("广东");
        matchRule.setCity("广州");
        matchRule.setLanguage("zh_CN");
        personaliseMenu.setMatchRule(matchRule);
      System.out.println(">>>"+menuService.addConditional(personaliseMenu));
    }

//  @Test
    public void delConditional() {
        PersonaliseMenu personaliseMenu = new PersonaliseMenu();
        personaliseMenu.setMenuid("433270469");
      System.out.println(">>>"+menuService.delConditional(personaliseMenu));
    }

//  @Test
    public void testConditional() {
        PersonaliseMenu personaliseMenu = new PersonaliseMenu();
        personaliseMenu.setUser_id(WeChatCertificate.OPENID1);
      System.out.println(">>>"+menuService.testConditional(personaliseMenu));
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值