 分类:
    微信公众号
    
    分类:
    微信公众号
假如有一天你喝醉了,一个人走在街头,会歇斯底里的喊出谁的名字?
时光如流水般逝去,站在青春的末稍,扭过头,观望曾经走过的岁月,感悟过去与现在的自己。

  今天我们分享的知识是:自己后台自定义搭建自己的微信公众号菜单栏。
注释:初学者可参照微信公众号开发文档再结合本文章,那样更容易理解。
  
第一步:我们需要新建一个类库封装菜单栏字段名称:代码如下:
 public  class WxMenuDTO
    {
        //一级菜单
        public string name { get; set; }
        public string key { get; set; }
        public string type { get; set; }
        public string url { get; set; }
        //二级菜单
        public List<WxMenuDTO> sub_button { get; set; }
    }第二步:我们需要在项目新建一个菜单控制器封装自定义菜单的方法:(菜单数据就相当于一个json对象)
思路分析:通过调用实体字段自定义菜单栏--》通过post请求将数据发送到自己服务器端生成即可。代码如下:
假如项目没有导入json对象,可手动依赖注入安装。命令为:Install-Package Newtonsoft.Json -Version 12.0.1
 public ActionResult CreateMenu()
        {
            HttpClient httpClient = new HttpClient();
            List<WxMenuDTO> wxMenuDTO = new List<WxMenuDTO>();  //跳转属性:view ,单击属性:click
            wxMenuDTO.Add(new WxMenuDTO() { name = "后端", key = "wx_menu_behind", type = "click",
                sub_button=new List<WxMenuDTO>()  //二级菜单
                {
                    new WxMenuDTO(){ name = "java", key = "wx_menu_java", type = "click" },
                    new WxMenuDTO(){ name = ".net", key = "wx_menu_net", type = "view" ,url= "http://www.tnblog.net/15985459135/article/details/2969"},
                    new WxMenuDTO(){ name = "python", key = "wx_menu_python", type = "click" }
                }
            });
            wxMenuDTO.Add(new WxMenuDTO() { name = "前端", key = "wx_menu_f", type = "click" ,
                sub_button=new List<WxMenuDTO>()
                {
                    new WxMenuDTO(){ name = "Vue", key = "wx_menu_vue", type = "click" },
                    new WxMenuDTO(){ name = "Mui", key = "wx_menu_mui", type = "click" },
                    new WxMenuDTO(){ name = "Layui", key = "wx_menu_layui", type = "click" }
                }
            });
            wxMenuDTO.Add(new WxMenuDTO() { name = "更多", key = "wx_menu_db", type = "click",
                sub_button = new List<WxMenuDTO>()
                {
                    new WxMenuDTO(){ name = "Ajax", key = "wx_menu_ajax", type = "click" },
                    new WxMenuDTO(){ name = "Json", key = "wx_menu_json", type = "click" },
                    new WxMenuDTO(){ name = "IO", key = "wx_menu_io", type = "click" }
                }
            });
            //在前面加button
            var tempobj = new { button = wxMenuDTO };
            //设置json 序列化忽略null值
            JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings();
            jsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore;
             //拿到json字符串
            //需要在该项目使用依赖注入 json    Install-Package Newtonsoft.Json -Version 12.0.1
            string jsonstr = JsonConvert.SerializeObject(tempobj, jsonSerializerSettings);
            StringContent stringContent = new StringContent(jsonstr);
            string result = httpClient.PostAsync("https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + AccessTokentools.GetToken(), stringContent).Result.Content.ReadAsStringAsync().Result;
            return Json(result,JsonRequestBehavior.AllowGet);
        }第三步:由于新注册的微信公众号对于自定义菜单接口,没有权限,所以需要自己申请一个微信公众测试号进行操作一系列功能。
测试号几乎拥有全部的功能权限,下图有个参考哦。
    
           
            对于测试号我们需要获取token。这里token则可以用自己注册的token使用。
下面我们在定义token的类库里的把调用的appid和密码换成测试号的appid和密码就有权限自定义菜单了,代码如下:
public static string GetToken()
        {
            RedisClient redisClient = new RedisClient();
            //先从缓存中获取
            string token = redisClient.Get<string>("token");
            if (token != null)
            {
                return token;
            }
            //缓存中没有就从外网获取
            HttpClient httpClient = new HttpClient();
            //由于自己账号权限不足,所以使用微信测试账号做功能
            string result = httpClient.GetAsync("
         https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&
       appid=wwwwwwwww&secret=yyyyyyyyyyyyy").Result.Content.ReadAsStringAsync().Result;
            //下面要处理时间过期事件
            // 1,在该类库需要使用依赖注入 json    Install-Package Newtonsoft.Json -Version 12.0.1
            AccessTokenDTO accessTokenDTO = JsonConvert.DeserializeObject<AccessTokenDTO>(result);
            //2,把token写入缓存里
            //在该类库先依赖注入数据  install-package ServiceStack.Redis
            //手动启动redis服务
            //为了token 2小时过期,所以我们缓存的时间要和微信token时间大致相同,可设置差几百秒(160)
            redisClient.Set<string>("token", accessTokenDTO.access_token,TimeSpan.FromSeconds(accessTokenDTO.expires_in-160));
            return accessTokenDTO.access_token;
        }最后我们只需把项目跑起来,看json对象返回是否成功就行了。下图有参考。

  ok, 这里返回数据成功后,大家可以把项目发布到自己的服务器上,然后打开微信扫一扫自己的测试号二维码关注看效果哦。
这里返回数据成功后,大家可以把项目发布到自己的服务器上,然后打开微信扫一扫自己的测试号二维码关注看效果哦。
好啦,本次分享就到这里结束啦,下一篇文章分享微信公众号的接收和推送并记录消息功能。本篇文章有不懂的欢迎留言谈论哦。
评价
    
                    排名
                
                
                    6
                
            
                    文章
                
                
                    6
                
            
                    粉丝
                
                
                    16
                
            
                    评论
                
                
                    8
                
            
            {{item.articleTitle}}
            
    {{item.blogName}} : {{item.content}}
        
            ICP备案  :渝ICP备18016597号-1
        
        
            网站信息:2018-2025TNBLOG.NET
        
        
            技术交流:群号656732739
        
        
            联系我们:contact@tnblog.net
        
        
            公网安备: 50010702506256
50010702506256
        
     50010702506256
50010702506256
         
        
            欢迎加群交流技术
        
     
         
         
        