新普金娱乐网址


C#开发微信门户及下(14)-在微信菜单中采用重定向得到用户数量

梦  小说

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

  • 九月 05, 2018
  • 地理
  • 没有评论

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,实现菜单的交付处理了。

倘谢兴趣或体验相关的客服回复功能,可以关注本身之微信询问下。具体成效好关注我之微信门户:广州爱奇迪,也堪扫描下二维码进行关爱了解。

地理 1

 

设若对是系列感兴趣,可以关注自己之另外文章,系列随笔如下所示:

C#开微信门户及使用(25)-微信企业号的客户端管住职能

C#开发微信门户及运用(24)-微信小店货架信息保管

C#开微信门户及动(23)-微信小店商品管理接口的包装和测试

C#开发微信门户及使用(22)-微信小店的开支及动用

C#支付微信门户及运用(21)-微信企业号的消息以及事件之接纳处理及解密 

C#出微信门户及采取(20)-微信企业号的食谱管理

C#付出微信门户及利用(19)-微信企业号的信发送(文本、图片、文件、语音、视频、图文信息等)

C#支出微信门户及采取(18)-微信企业号的通讯录管理支付的成员管理

C#开微信门户及运用(17)-微信企业号的通讯录管理支出的部门管理

C#开发微信门户及下(16)-微信企业号的配备以及运用

C#支出微信门户及应用(15)-微信菜单增加扫一扫、发图片、发地理位置功能

 C#开微信门户及动(14)-在微信菜单中应用重定向获用户数量

C#开发微信门户及应用(13)-使用地理位置扩展相关以

C#支付微信门户及用(12)-使用语音处理

C#开发微信门户及动(11)–微信菜单的又展现方式介绍

C#支付微信门户及应用(10)–在管理体系被一道微信用户分组信息

C#出微信门户及用(9)-微信门户菜单管理暨交到微信服务器

C#支出微信门户及下(8)-微信门户应用管理网机能介绍

C#出微信门户及应用(7)-微信多客服功能以及开并

C#支出微信门户及用(6)–微信门户菜单的管制操作

C#开发微信门户及下(5)–用户分组信息保管

C#支付微信门户及应用(4)–关注用户列表及详细信息管理

C#开发微信门户及用(3)–文本信及图文信息之答复

C#支付微信门户及下(2)–微信信息之拍卖及回应

C#开发微信门户及应用(1)–开始使用微信接口

 

微信下如火如荼,很多商家还想大增上信息快车,这个是一个商机,也是一个技的势头,因此,有空切磋下、学习下微信的连锁支出,也就是改成计划的布置工作有了。本系列文章要从一个渐进的角度上,全面介绍微信的连锁支出进程以及血脉相通经验总结,希望被大家探听一下有关的支出过程。本篇随笔主要基于上一样篇《C#出微信门户及采取(1)–开始用微信接口》的根基及展开深刻的介绍,介绍微信信息之处理和应对的过程。

1、微信菜单的要求跟有关界面设计

微信公众号的食谱我们得以经过网站开展地面的治本,维护好它中间的层级关系,由于微信对由定义之菜谱要求比较严峻,以下是微信对由定义菜单的要求:

眼下从定义菜单最多包3单一级菜单,每个一级菜单最多带有5独二级菜单。一级菜单最多4单汉字,二级菜单最多7只字,多出去的片段将会晤盖“…”代替。

故我们团结一心根据约定,不要越界即可,否则提交菜单到服务器,可能会见回去一些错,这些细节,我们在开立本地菜单管理之时光,注意一下便足以了。我以最初的相同首文章吧介绍了自定义菜单的部分情,需要好拓展追思一下《C#出微信门户及利用(6)–微信门户菜单的军事管制操作》,本篇主要是介绍在自身之阳台管理体系内部,调用前面介绍的食谱接口API,实现菜单提交至服务器的操作。

因微信的自定义菜单要求,我在保管网里面,对微信的菜单几独基础性的界面设计如下。

主菜单管理界面如下所示。

地理 2

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

地理 3

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

地理 4

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

地理 5

 

1、微信的音信对交互

咱们解,微信的服务器架从了客户手机与开发者服务器的一个桥,通过信息之传递与应,实现了和用户之互动操作,下面是其的信流程图。

地理 6

微信向开发者服务器请求的信息包含了多种类型,不过基本来说,分为了文本消息处理、事件信息处理、语音信息之辨识,以及成为开发者之前的杀消息证实操作基本分类,下面是自家绘制的一个信息分类图,其中介绍了当时几种关系,以及个别的信息细化分类。

地理 7

对这些信的恳求,我们当支付服务器端,需要编制相关的逻辑进行针对许受的拍卖,然后于微信服务器平台对消息即可。

于前面同一篇的随笔里面我贴了代码,介绍微信消息处理的进口操作,代码如下所示。

        public void ProcessRequest(HttpContext context)
        {
            //WHC.Framework.Commons.LogTextHelper.Info("测试记录");

            string postString = string.Empty;
            if (HttpContext.Current.Request.HttpMethod.ToUpper() == "POST")
            {
                using (Stream stream = HttpContext.Current.Request.InputStream)
                {
                    Byte[] postBytes = new Byte[stream.Length];
                    stream.Read(postBytes, 0, (Int32)stream.Length);
                    postString = Encoding.UTF8.GetString(postBytes);
                }

                if (!string.IsNullOrEmpty(postString))
                {
                    Execute(postString);
                }
            }
            else
            {
                Auth();
            }
        }

内的Execute(postString);就是对信息之处理函数,它实现了对不同消息之分发处理过程。‘

        /// <summary>
        /// 处理各种请求信息并应答(通过POST的请求)
        /// </summary>
        /// <param name="postStr">POST方式提交的数据</param>
        private void Execute(string postStr)
        {
            WeixinApiDispatch dispatch = new WeixinApiDispatch();
            string responseContent = dispatch.Execute(postStr);

            HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
            HttpContext.Current.Response.Write(responseContent);
        }

里头的WeixinApiDispatch就是一个分发的管理类,它取请求消息的内容,并构建不同品种的音信参数,传递给不同之响应函数进行拍卖,然后返回封装好之XML内容,作为响应。

具体的代码处理逻辑如下图所示。

地理 8

夫信息处理接口,其实就是是概念好同一多元之指向要消息的拍卖操作,参数是殊为的消息对象,具体的代码定义如下所示(由于篇幅由,省略有接口,具体可参见达图)。

    /// <summary>
    /// 客户端请求的数据接口
    /// </summary>
    public interface IWeixinAction
    {
        /// <summary>
        /// 对文本请求信息进行处理
        /// </summary>
        /// <param name="info">文本信息实体</param>
        /// <returns></returns>
        string HandleText(RequestText info);

        /// <summary>
        /// 对图片请求信息进行处理
        /// </summary>
        /// <param name="info">图片信息实体</param>
        /// <returns></returns>
        string HandleImage(RequestImage info);

...........................


        /// <summary>
        /// 对订阅请求事件进行处理
        /// </summary>
        /// <param name="info">订阅请求事件信息实体</param>
        /// <returns></returns>
        string HandleEventSubscribe(RequestEventSubscribe info);

        /// <summary>
        /// 对菜单单击请求事件进行处理
        /// </summary>
        /// <param name="info">菜单单击请求事件信息实体</param>
        /// <returns></returns>
        string HandleEventClick(RequestEventClick info);

..............................
    }

从今点的代码可以见见,不同的信,到处理函数这里,就因不同之音信实体类的艺术传递过来了(瞩目:实体类是本人因程序支付需要自己定义之,非微信本身的实体类),这样不行便宜我们处理操作,否则每次需要分析不同的音讯内容,很轻出现问题,这样强类型的数据类型,提高了咱出微信下的强壮型和高效性。这些实体类的靶子有必然的继续关系之,他们之连续关系如下所示。

地理 9

微信公众号(包括服务号和订阅号)都足以针对菜单进行自定义设置,我们为方便管理,一般先拿菜单数据在地方管理保障,需要创新的当儿,把其更新至微信服务器上就是足以了。本文基于此办法,介绍我的微信门户平台管理体系受菜单提交至微信服务器上的操作。微信门户应用管理网,采用基于MVC+EasyUI的路子,由于大部分域名服务器上还只好支持.NET4.0,所以以MVC3,C#4.0作开发基础,基本上会部署在任何.NET服务器上。

2、微信的保管接口

面的信息分类是微信服务器向开发者服务器发送的音请求操作,还有同种植信息,是咱开发者服务器向微信服务器进行的消息请求或响应,这种这里权且称之为微信的田间管理接口,它表明了咱得以经这些接口进行有关的音讯回复或者数管理操作。它的归类图如下所示。

地理 10

微信的过来消息处理,它也同点小节的消息相同,它呢是后续自BaseMessage实体类的(一律,下图的实体类及其继承关系吗是于定义之,方便程序支付),它的涉如下所示

地理 11

过来的音,一般用的极度多的是文本消息及图文信息。

文件消息之功力如下所示。

地理 12

图文信息,可以长图,还得多详细的链接页面,是怪难堪的一律种功能,对于部分情比较多,希望呈现更好作用的,一般下这种,效果如下所示。

地理 13

 

C#开发微信门户及下(25)-微信企业号的客户端管住作用

C#支付微信门户及应用(24)-微信小店货架信息保管

C#开发微信门户及用(23)-微信小店商品管理接口的卷入和测试

C#支付微信门户及下(22)-微信小店的付出与采取

C#出微信门户及应用(21)-微信企业号的音和事件的收处理同解密 

C#付出微信门户及以(20)-微信企业号的菜单管理

C#支付微信门户及使用(19)-微信企业号的音讯发送(文本、图片、文件、语音、视频、图文信息等)

C#开微信门户及以(18)-微信企业号的通讯录管理支出之成员管理

C#开发微信门户及使用(17)-微信企业号的通讯录管理出的部门管理

C#支出微信门户及用(16)-微信企业号的布和下

C#开微信门户及采取(15)-微信菜单增加扫一扫、发图片、发地理位置功能

 C#开发微信门户及用(14)-在微信菜单中采取重定向得到用户数量

C#支出微信门户及下(13)-使用地理位置扩展相关以

C#出微信门户及应用(12)-使用语音处理

C#支付微信门户及用(11)–微信菜单的余呈现方法介绍

C#出微信门户及下(10)–在治本网遭到共同微信用户分组信息

C#支出微信门户及利用(9)-微信门户菜单管理和交至微信服务器

C#出微信门户及以(8)-微信门户应用管理体系功能介绍

C#支出微信门户及采取(7)-微信多客服功能与支出并

C#出微信门户及利用(6)–微信门户菜单的管住操作

C#支出微信门户及用(5)–用户分组信息保管

C#开发微信门户及下(4)–关注用户列表及详细信息管理

C#支付微信门户及应用(3)–文本音以及图文信息的对答

C#出微信门户及用(2)–微信音之处理和应

C#支付微信门户及下(1)–开始下微信接口

相关文章

No Comments, Be The First!
近期评论
    分类目录
    功能
    网站地图xml地图