# 菜单设置

自定义菜单是企业微信应用界面的重要元素,菜单的使用分为 设置使用 两个环节。

# 设置

方法一:在企业微信后台【应用管理】中,某个应用设置界面中,【功能】区域【自定义菜单】中设置(不使用开发模式),此处略。

方法二:使用代码进行设置(只需要执行一次,建议放在管理员后台,手动运行),如:

public async Task CreateMenuTest()
{
    ButtonGroup bg = new ButtonGroup();

    //单击
    bg.button.Add(new SingleClickButton()
    {
        name = "单击测试",
        key = "OneClick",
        type = MenuButtonType.click.ToString(),//默认已经设为此类型,这里只作为演示
    });

    //二级菜单
    var subButton = new SubButton()
    {
        name = "二级菜单"
    };
    subButton.sub_button.Add(new SingleClickButton()
    {
        key = "SubClickRoot_Text",
        name = "返回文本"
    });
    subButton.sub_button.Add(new SingleViewButton()
    {
        url = "https://weixin.senparc.com",
        name = "Url跳转"
    });
    bg.button.Add(subButton);

    var workWeixinSetting = Config.SenparcWeixinSetting.WorkSetting;
    var appKey = AccessTokenContainer.BuildingKey(workWeixinSetting);
    int agentId;
    if (!int.TryParse(workWeixinSetting.WeixinCorpAgentId, out agentId))
    {
        throw new WeixinException("WeixinCorpAgentId 必须为整数!");
    }
    var result = await CommonApi.CreateMenuAsync(appKey, agentId, bg);

    Assert.IsNotNull(result);
    Assert.AreEqual("ok", result.errmsg);
}

# 使用

设置完菜单后,当客户端点击菜单时,微信服务器会自动推送响应的回调信息到消息 URL(即已经设置好的 MessageHandler 内),只需在 WorkCustomMessageHandler 中重写(override)对应的方法即可。如针对上述 方法二 已经设定生效的菜单,当用户点击【单击测试】按钮时,我们可以在 WorkCustomMessageHandler 中进行接收和处理:

public override IWorkResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage)
{
    var reponseMessage = CreateResponseMessage();

    if (requestMessage.EventKey == "SubClickRoot_Text")
    {
        reponseMessage.Content = "您点击了【返回文本】按钮";
    }
    else
    {
        reponseMessage.Content = "您点击了其他事件按钮";
    }

    return reponseMessage;
}

本项目参考文件:

/MessageHandlers/WorkCustomMessageHandler.cs