分类:
微信公众号
假如有一天你喝醉了,一个人走在街头,会歇斯底里的喊出谁的名字?
时光如流水般逝去,站在青春的末稍,扭过头,观望曾经走过的岁月,感悟过去与现在的自己。
今天我们分享的知识是:自己后台自定义搭建自己的微信公众号菜单栏。
注释:初学者可参照微信公众号开发文档再结合本文章,那样更容易理解。
第一步:我们需要新建一个类库封装菜单栏字段名称:代码如下:
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-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术