# 菜单设置

公众号菜单是公众号界面的重要元素,菜单的使用分为 设置使用 两个环节。

# 设置

方法一:使用微信公众号后台界面设置(不使用开发模式),此处略。

方法二(推荐):使用可视化编辑器(No Code):点击查看介绍 (opens new window)

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

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

    //定义一级菜单
    var subButton = new SubButton()
    {
        name = "一级菜单"
    };
    bg.button.Add(subButton);

    //下属二级菜单
    subButton.sub_button.Add(new SingleViewButton()
    {
        url = "https://book.weixin.senparc.com/book/link?code=SenparcRobotMenu",
        name = "《微信开发深度解析》"
    });
    subButton.sub_button.Add(new SingleClickButton()
    {
        key = "OneClick",
        name = "单击测试"
    });
    subButton.sub_button.Add(new SingleViewButton()
    {
        url = "https://weixin.senparc.com/",
        name = "Url跳转"
    });

    //最多可添加 3 个一级自定义菜单,每个菜单下最多 5 个子菜单

    var result = await CommonApi.CreateMenuAsync(appId, bg);
}

# 使用

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

public override async Task OnEvent_ClickRequestAsync(RequestMessageEvent_Click requestMessage)
{
    var reponseMessage = CreateResponseMessage();

    if (requestMessage.EventKey == "OneClick")
    {
        reponseMessage.Content = "您点击了【单击测试】按钮";
    }
    else
    {
        reponseMessage.Content = "您点击了其他事件按钮";
    }

    return reponseMessage;
}

本项目参考文件:

/MessageHandlers/CustomMessageHandler_Events.cs