C#开发微信门户及应用(9)-微信门户菜单管理和交到微信服务器

微信公众号(包括服务号和订阅号)都足以本着菜单进行自定义设置,我们为方便管理,一般先将菜单数据以该地管理保护,需要创新的时节,把它更新到微信服务器上便好了。本文基于这艺术,介绍自身的微信门户平台管理网遭到菜单提交到微信服务器上的操作。微信门户应用管理网,采用基于MVC+EasyUI的门径,由于多数域名服务器上还只好支持.NET4.0,所以以MVC3,C#4.0作开发基础,基本上会部署在任何.NET服务器上。

1、微信菜单的渴求跟连锁界面设计

微信公众号的菜系我们得以经过网站进行本地的治本,维护好它们之间的层级关系,由于微信对从定义的菜系要求于严,以下是微信对由定义菜单的求:
现阶段自从定义菜单最多包3单一级菜单,每个一级菜单最多带有5独二级菜单。一级菜单最多4单汉字,二级菜单最多7独汉字,多出去的有用见面为“…”代替。
故此我们团结因预约,不要越界即可,否则提交菜单到服务器,可能会见回到一些左,这些细节,我们以开创本地菜单管理的时,注意一下哪怕得了。我于初的平首文章也罢介绍了自定义菜单的片情,需要可以进行追思一下《C#出微信门户及应用(6)–微信门户菜单的管理操作》,本篇主要是介绍于自我的阳台管理体系内部,调用前面介绍的菜系接口API,实现菜单提交到服务器的操作。
据悉微信的自定义菜单要求,我当治本网之中,对微信的菜系几单基础性的界面设计如下。
主菜单管理界面如下所示。

填补加菜单的界面设计如下所示

微信菜单的修改界面如下所示

微信菜单定义是储存于数据库中,如果急需付到微信服务器上连生效,则需调用微信API接口进行处理,我当页面的Controller控制器里多一个付出至服务器的处理方式。

2、提交菜单到微信服务器的操作

方几乎个界面,主要就是是因微信菜单的习性,对菜单进行保障管理,我们最后的目的是拿它们坐服务器上,供我们处理客户的连锁事件操作的。
交由菜单的操作,我们以MVC的View页面里面,使用JQuery的Ajax提交即可(前提是我们于控制器里面长相应的拍卖,后面介绍),界面脚本代码如下所示。

//绑定提交按钮的的点击事件
function BindSubmitEvent() {
$("#btnSubmit").click(function () {
    $.messager.confirm("提交菜单确认", "您确认需要提交菜单到微信服务器吗?", function (action) {
        if (action) {
            //提交数据
            $.ajax({
                url: '/Menu/UpdateWeixinMenu',
                type: 'post',
                dataType: 'json',
                success: function (data) {
                    if (data.Success) {
                        $.messager.alert("提示", "提交微信菜单成功");
                    }
                    else {
                        $.messager.alert("提示", "提交微信菜单失败:" + data.ErrorMessage);
                    }
                },
                data: ''
            });
        }
    });
});
}

方红色的代码,就是我们在MVC的控制器里面定义的法门,我们仅仅待通过POST方法,对控制器方法调用,就可知促成菜单提交到微信服务器上,至于具体里面的底细,我们可以管其挪到控制器或者更底层进行处理便是了,页面不需要涉及太多之逻辑就是是了。

上面十分Menu控制器的UpdateWeixinMenu的法子代码如下所示(主要就是基于本人眼前介绍过的开模型进行处理便是了)。

/// <summary>
///更新微信菜单
/// </summary>
/// <returns></returns>
public ActionResult UpdateWeixinMenu()
{
    string token = base.GetAccessToken();
    MenuListJson menuJson = GetWeixinMenu();

    IMenuApi menuApi = new MenuApi();
    CommonResult result = menuApi.CreateMenu(token, menuJson);
    return ToJsonContent(result);
}

方的几个点子这里逐一介绍一下。GetAccessToken主要就是是收获当前操作的访令牌,这里的操作可以为此缓存进行缓存,否则频繁之获取AccessToken,达到每日指定的次数后,当天即非可知再次就此了。

GetWeixinMenu方法,主要就是是为好,对获得构造微信的自定义菜单数据开展了一个函数封装,具体代码如下所示。

/// <summary>
/// 生成微信菜单的Json数据
/// </summary>
/// <returns></returns>
private MenuListJson GetWeixinMenu()
{
    MenuListJson menuJson = new MenuListJson();

    List<MenuNodeInfo> menuList = BLLFactory<Menu>.Instance.GetTree();
    foreach (MenuNodeInfo info in menuList)
    {
        ButtonType type = (info.Type == "click") ? ButtonType.click : ButtonType.view;
        string value = (type == ButtonType.click) ? info.Key : info.Url;

        MenuJson weiInfo = new MenuJson(info.Name, type, value);
        AddSubMenuButton(weiInfo, info.Children);

        menuJson.button.Add(weiInfo);
    }
    return menuJson;
}

private void AddSubMenuButton(MenuJson menu, List<MenuNodeInfo> menuList)
{
    if (menuList.Count > 0)
    {
        menu.sub_button = new List<MenuJson>();
    }
    foreach (MenuNodeInfo info in menuList)
    {
        ButtonType type = (info.Type == "click") ? ButtonType.click : ButtonType.view;
        string value = (type == ButtonType.click) ? info.Key : info.Url;

        MenuJson weiInfo = new MenuJson(info.Name, type, value);
        menu.sub_button.Add(weiInfo);

        AddSubMenuButton(weiInfo, info.Children);
    }
}

面的代码,就是拿地面存储的MenuNodeInfo数据,通过递归遍历的计,转换为微信的自定义菜单实体MenuJson,这样我们调用API就很有利于了,这个函数主要负责组织对应的实体信息就是了。至于调用微信API提交菜单的工作,还是让API自己亲处理啊好,他们的代码如下所示(也不怕是面函数的片段代码)。

IMenuApi menuApi = new MenuApi();
CommonResult result = menuApi.CreateMenu(token, menuJson);
return ToJsonContent(result);

末尾的结果是返回一个通用的结果CommonResult,这个结果对象,非常便利脚本的处理,如果起误,则提醒错误,否则也便于判断布尔值,也即是端的页面代码脚本。

success: function (data) {
    if (data.Success) {
              $.messager.alert("提示", "提交微信菜单成功");
       }
      else {
                $.messager.alert("提示", "提交微信菜单失败:" + data.ErrorMessage);
        }
   },

通过以上几乎有些之代码,我们就算足以实现前台MVC的视图界面,调用后台封装好之微信API,实现菜单的付出处理了。
如果谢兴趣或体验相关的客服对功能,可以关心自我的微信了解下。具体职能好关心自己的微信门户:广州爱奇迪,也可扫描下二维码进行关爱了解。

假定对是系列感兴趣,可以关心我的别样文章。