开发微信企业号可以通过程序自定义菜单,只需要调用相关的接口就可以实现。
其实这个菜单也就是微信底部的菜单,目前自定义菜单最多包括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/tech/pnotes/5306.html