tnblog
首页
视频
资源
登录

后台调用菜单接口+自定义菜单

4020人阅读 2019/12/13 15:08 总访问:402684 评论:0 收藏:0 手机
分类: 微信公众号

假如有一天你喝醉了,一个人走在街头,会歇斯底里的喊出谁的名字?

时光如流水般逝去,站在青春的末稍,扭过头,观望曾经走过的岁月,感悟过去与现在的自己。


  今天我们分享的知识是:自己后台自定义搭建自己的微信公众号菜单栏。

 注释:初学者可参照微信公众号开发文档再结合本文章,那样更容易理解。

 

 第一步:我们需要新建一个类库封装菜单栏字段名称:代码如下:

  1.  public  class WxMenuDTO
  2.     {
  3.         //一级菜单
  4.         public string name { getset; }
  5.         public string key { getset; }
  6.         public string type { getset; }
  7.         public string url { getset; }
  8.         //二级菜单
  9.         public List<WxMenuDTO> sub_button { getset; }
  10.     }

 第二步:我们需要在项目新建一个菜单控制器封装自定义菜单的方法:(菜单数据就相当于一个json对象)

 思路分析:通过调用实体字段自定义菜单栏--》通过post请求将数据发送到自己服务器端生成即可。代码如下:

  假如项目没有导入json对象,可手动依赖注入安装。命令为:Install-Package Newtonsoft.Json -Version 12.0.1

  1.  public ActionResult CreateMenu()
  2.         {
  3.             HttpClient httpClient = new HttpClient();
  4.             List<WxMenuDTO> wxMenuDTO = new List<WxMenuDTO>();  //跳转属性:view ,单击属性:click
  5.             wxMenuDTO.Add(new WxMenuDTO() { name = "后端", key = "wx_menu_behind", type = "click",
  6.                 sub_button=new List<WxMenuDTO>()  //二级菜单
  7.                 {
  8.                     new WxMenuDTO(){ name = "java", key = "wx_menu_java", type = "click" },
  9.                     new WxMenuDTO(){ name = ".net", key = "wx_menu_net", type = "view" ,url= "http://www.tnblog.net/15985459135/article/details/2969"},
  10.                     new WxMenuDTO(){ name = "python", key = "wx_menu_python", type = "click" }
  11.                 }
  12.             });
  13.             wxMenuDTO.Add(new WxMenuDTO() { name = "前端", key = "wx_menu_f", type = "click" ,
  14.                 sub_button=new List<WxMenuDTO>()
  15.                 {
  16.                     new WxMenuDTO(){ name = "Vue", key = "wx_menu_vue", type = "click" },
  17.                     new WxMenuDTO(){ name = "Mui", key = "wx_menu_mui", type = "click" },
  18.                     new WxMenuDTO(){ name = "Layui", key = "wx_menu_layui", type = "click" }
  19.                 }
  20.             });
  21.             wxMenuDTO.Add(new WxMenuDTO() { name = "更多", key = "wx_menu_db", type = "click",
  22.                 sub_button = new List<WxMenuDTO>()
  23.                 {
  24.                     new WxMenuDTO(){ name = "Ajax", key = "wx_menu_ajax", type = "click" },
  25.                     new WxMenuDTO(){ name = "Json", key = "wx_menu_json", type = "click" },
  26.                     new WxMenuDTO(){ name = "IO", key = "wx_menu_io", type = "click" }
  27.                 }
  28.             });
  29.             //在前面加button
  30.             var tempobj = new { button = wxMenuDTO };
  31.             //设置json 序列化忽略null值
  32.             JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings();
  33.             jsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore;
  34.              //拿到json字符串
  35.             //需要在该项目使用依赖注入 json    Install-Package Newtonsoft.Json -Version 12.0.1
  36.             string jsonstr = JsonConvert.SerializeObject(tempobj, jsonSerializerSettings);
  37.             StringContent stringContent = new StringContent(jsonstr);
  38.             string result = httpClient.PostAsync("https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + AccessTokentools.GetToken(), stringContent).Result.Content.ReadAsStringAsync().Result;
  39.             return Json(result,JsonRequestBehavior.AllowGet);
  40.         }

第三步:由于新注册的微信公众号对于自定义菜单接口,没有权限,所以需要自己申请一个微信公众测试号进行操作一系列功能。

         测试号几乎拥有全部的功能权限,下图有个参考哦。

   


          

            对于测试号我们需要获取token。这里token则可以用自己注册的token使用。

            下面我们在定义token的类库里的把调用的appid和密码换成测试号的appid和密码就有权限自定义菜单了,代码如下:

 

  1. public static string GetToken()
  2.         {
  3.             RedisClient redisClient = new RedisClient();
  4.             //先从缓存中获取
  5.             string token = redisClient.Get<string>("token");
  6.             if (token != null)
  7.             {
  8.                 return token;
  9.             }
  10.             //缓存中没有就从外网获取
  11.             HttpClient httpClient = new HttpClient();
  12.             //由于自己账号权限不足,所以使用微信测试账号做功能
  13.             string result = httpClient.GetAsync("
  14.          https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&
  15.        appid=wwwwwwwww&secret=yyyyyyyyyyyyy").Result.Content.ReadAsStringAsync().Result;
  16.             //下面要处理时间过期事件
  17.             // 1,在该类库需要使用依赖注入 json    Install-Package Newtonsoft.Json -Version 12.0.1
  18.             AccessTokenDTO accessTokenDTO = JsonConvert.DeserializeObject<AccessTokenDTO>(result);
  19.             //2,把token写入缓存里
  20.             //在该类库先依赖注入数据  install-package ServiceStack.Redis
  21.             //手动启动redis服务
  22.             //为了token 2小时过期,所以我们缓存的时间要和微信token时间大致相同,可设置差几百秒(160)
  23.             redisClient.Set<string>("token", accessTokenDTO.access_token,TimeSpan.FromSeconds(accessTokenDTO.expires_in-160));
  24.             return accessTokenDTO.access_token;
  25.         }

  最后我们只需把项目跑起来,看json对象返回是否成功就行了。下图有参考。

 


  ok,这里返回数据成功后,大家可以把项目发布到自己的服务器上,然后打开微信扫一扫自己的测试号二维码关注看效果哦。


好啦,本次分享就到这里结束啦,下一篇文章分享微信公众号的接收和推送并记录消息功能。本篇文章有不懂的欢迎留言谈论哦。






评价
你之所以觉得时间一年比一年过得快,是因为时间对你一年比一年重要。
排名
13
文章
64
粉丝
20
评论
30
MUI框架页面间的传值指针
XingDy姐 : 不错哦
MUI框架页面间的传值指针
剑轩 : 接口的真实地址可以用xx/yy什么的代替哦,真实地址还是隐藏一下好
.NET EF 用户按钮权限
YOU : 可以,在写文章的时候,有需要写代码的地方,可以选择编辑器上的代...
.NET EF 用户按钮权限
剑轩 : 哈哈哈哈,你这个追女生的逻辑
EF三种模式解析
剑轩 : 好文采!
重要sql语句和linq,lamdba分组条件查询语句
剑轩 : 开头那句诗句写得很好哇!
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术