微信企业号开发:自定义菜单详解手机开发

开发微信企业号可以通过程序自定义菜单,只需要调用相关的接口就可以实现。

其实这个菜单也就是微信底部的菜单,目前自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“…”代替。其实创建菜单也很简单。

但有一点需要说明,如果有子菜单,那么这个菜单就不会向后端发送事件。例如:我定义了三个一级菜单一个click,两个view。

如果没有子菜单,则点击click类型的菜单时,后主动向后端发送上报菜单事件,如果有则不会发送上报菜单事件。

如果没有子菜单,则点击view类型的菜单时,回主动向后端发送点击菜单跳转链接的事件。并且会打开对应的网页,如果有则不会发送点击菜单跳转链接的事件,也不会打开对应的网页

也就是,如果有子菜单,则这个菜单,就是点击单纯的显示子菜单,不会有其他的动作了。

例如:

微信企业号开发:自定义菜单详解手机开发

核心代码菜单相关:

public enum MenuTypeEnum 
    { 
        click = 1, 
        view = 2, 
        scancode_push = 3, 
        scancode_waitmsg = 4, 
        pic_sysphoto = 5, 
        pic_photo_or_album = 6, 
        pic_weixin = 7, 
        location_select = 8 
 
    }; 
   public abstract class SubButton 
    { 
        /// <summary> 
        /// 菜单的响应动作类型,目前有click、view两种类型 scancode_push	扫码推事件scancode_waitmsg	扫码推事件且弹出“消息接收中”提示框 
        /// </summary> 
        public string type { get; protected set; } 
        /// <summary> 
        /// 菜单标题,不超过16个字节,子菜单不超过40个字节  
        /// </summary> 
        public string name { get; set; } 
        public List<SubButton> sub_button { get; set; } 
        public virtual bool  HasError() 
        { 
            if (string.IsNullOrEmpty(this.name)) 
            { 
                LogInfo.Error("菜单名称为空"); 
                return true; 
            }           
            if (string.IsNullOrEmpty(this.type)) 
            { 
                LogInfo.Error("菜单类型为空"); 
                return true; 
            } 
            if (sub_button!=null&&sub_button.Count > 0) 
            { 
                foreach (SubButton bt in sub_button) 
                { 
                    if (bt.HasError()) 
                    { 
                        return true; 
                    } 
                }             
            } 
            return false; 
        }       
        public static SubButton CreateSubButton(MenuTypeEnum type,string name,string key,string url) 
        { 
            SubButton subButton = null; 
            string menuTypeText = GetMenuTypeText(type); 
            switch (type) 
            {   
                case MenuTypeEnum.view: 
                    subButton = new SubViewButton(menuTypeText,name, url); 
                    break; 
                case MenuTypeEnum.click: 
                case MenuTypeEnum.scancode_push:                  
                case MenuTypeEnum.scancode_waitmsg:                  
                case MenuTypeEnum.pic_sysphoto:                  
                case MenuTypeEnum.pic_photo_or_album:                   
                case MenuTypeEnum.pic_weixin:                 
                case MenuTypeEnum.location_select: 
                    subButton = new SubClickButton(menuTypeText, name, key);                 
                    break; 
                default: 
                    throw new Exception("type=" + type + ",此类型的SubButton没有实现"); 
 
            } 
            return subButton; 
        } 
        public static MenuTypeEnum GetMenuType(string type) 
        { 
            MenuTypeEnum text = MenuTypeEnum.click; 
            switch (type) 
            { 
                case "click": 
                    text = MenuTypeEnum.click; 
                    break; 
                case "view": 
                    text = MenuTypeEnum.view ; 
                    break; 
                case "scancode_push": 
                    text =MenuTypeEnum.scancode_push ; 
                    break; 
                case "scancode_waitmsg": 
                    text = MenuTypeEnum.scancode_waitmsg ; 
                    break; 
                case  "pic_sysphoto" : 
                    text = MenuTypeEnum.pic_sysphoto; 
                    break; 
                case "pic_photo_or_album": 
                    text = MenuTypeEnum.pic_photo_or_album ; 
                    break; 
                case "pic_weixin": 
                    text = MenuTypeEnum.pic_weixin ; 
                    break; 
                case "location_select": 
                    text =MenuTypeEnum.location_select ; 
                    break; 
                default: 
                    throw new Exception("type=" + type + ",此类型的MenuTypeEnum没有找到"); 
 
            } 
            return text; 
        } 
        public static string GetMenuTypeText(MenuTypeEnum type) 
        { 
            string text = ""; 
            switch (type) 
            { 
                case MenuTypeEnum.click: 
                    text = "click"; 
                    break; 
                case MenuTypeEnum.view: 
                    text = "view"; 
                    break; 
                case MenuTypeEnum.scancode_push: 
                    text = "scancode_push"; 
                    break; 
                case MenuTypeEnum.scancode_waitmsg: 
                    text = "scancode_waitmsg"; 
                    break; 
                case MenuTypeEnum.pic_sysphoto: 
                    text = "pic_sysphoto"; 
                    break; 
                case MenuTypeEnum.pic_photo_or_album: 
                    text = "pic_photo_or_album"; 
                    break; 
                case MenuTypeEnum.pic_weixin: 
                    text = "pic_weixin"; 
                    break; 
                case MenuTypeEnum.location_select: 
                    text = "location_select"; 
                    break; 
                default: 
                    throw new Exception("type=" + type + ",此类型的MenuTypeEnum没有实现"); 
 
            } 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/5306.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论