
假如有一天你喝醉了,一个人走在街头,会歇斯底里的喊出谁的名字?
时光如流水般逝去,站在青春的末稍,扭过头,观望曾经走过的岁月,感悟过去与现在的自己。
今天我们分享的知识是:自己后台自定义搭建自己的微信公众号菜单栏。
注释:初学者可参照微信公众号开发文档再结合本文章,那样更容易理解。
第一步:我们需要新建一个类库封装菜单栏字段名称:代码如下:
- 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,这里返回数据成功后,大家可以把项目发布到自己的服务器上,然后打开微信扫一扫自己的测试号二维码关注看效果哦。
好啦,本次分享就到这里结束啦,下一篇文章分享微信公众号的接收和推送并记录消息功能。本篇文章有不懂的欢迎留言谈论哦。
评价
排名
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


欢迎加群交流技术