微信公众号开发之设置自定义菜单实例代码【java版】
时间:2019-04-20
本文章向大家介绍微信公众号开发之设置自定义菜单实例代码【java版】,主要包括微信公众号开发之设置自定义菜单实例代码【java版】使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本实例是为了实现在管理后台实现微信菜单的添加删除管理。
1、首先我们需要新建一个数据库表用于存放menu菜单项
可包含的字段有id、父类id、name、排序、是否显示、类型(view、click)、链接、adddate
注意后台存menu菜单数据时,parentId=-1为一级菜单,或parendId为一级菜单的id作为该一级菜单下的二级菜单
2、在设置菜单时需要向微信接口传menuJson字符串,所以要先拼接字符串,后台定义一个creatMenu()
public bool creatMenu() { string menuJson = ""; //这里默认parentId=-1为最外层菜单,isactive=1为显示,responseType=1为click类型 DataTable dtAMenu = Service.SelectDataTable("id, name, responseType, jsonStr,url", "WEIXINMENU", " parentId=-1 and isactive=1 order by sort"); if (dtAMenu.Rows.Count > 0) { menuJson = "{\"button\":["; for (int i = 0; i < dtAMenu.Rows.Count; i++) { DataTable dtBMenu = Service.SelectDataTable("id, name, responseType, jsonStr,url", wx, " parentId=" + dtAMenu.Rows[i]["id"].ToString() + " and isactive=1 order by sort"); if (dtBMenu.Rows.Count > 0) { menuJson += "{\"name\":\"" + dtAMenu.Rows[i]["name"].ToString() + "\",\"sub_button\":["; for (int j = 0; j < dtBMenu.Rows.Count; j++) { if (Convert.ToInt32(dtBMenu.Rows[j]["responseType"]) == 2) { menuJson += "{\"type\":\"view\",\"name\":\"" + dtBMenu.Rows[j]["name"].ToString() + "\",\"url\":\"" + dtBMenu.Rows[j]["jsonStr"].ToString() + "\"},"; } else { menuJson += "{\"type\":\"click\",\"name\":\"" + dtBMenu.Rows[j]["name"].ToString() + "\",\"key\":\"eventKey_" + dtBMenu.Rows[j]["id"].ToString() + "\"},"; } } menuJson = menuJson.TrimEnd(','); menuJson += "]},"; } else { //if (Convert.ToInt32(dtAMenu.Rows[i]["responseType"]) == 2) //{ menuJson += "{\"type\":\"view\",\"name\":\"" + dtAMenu.Rows[i]["name"].ToString() + "\",\"url\":\"" + dtAMenu.Rows[i]["jsonStr"].ToString() + "\"},"; //} //else //{ // menuJson += "{\"type\":\"click\",\"name\":\"" + dtAMenu.Rows[i]["name"].ToString() + "\",\"key\":\"eventKey_" + dtAMenu.Rows[i]["id"].ToString() + "\"},"; //} } dtBMenu.Dispose(); } dtAMenu.Dispose(); menuJson = menuJson.TrimEnd(','); menuJson += "]}"; menuJson = menuJson.Trim(); return requstZmToCreatMent(menuJson); } else { return false; } }
3、获取到menujson字符串后调用微信接口创建菜单,需先获取assess token,有关assess token获取可参考:获取AccessToken
/// <summary> /// 向微信服务器请求创建自定义菜单 /// </summary> /// <param name="jsonStr"></param> /// <returns></returns> /// private bool requstZmToCreatMent(string jsonStr) { try { var AccessToken = "";//accesstoken需例外获取,一般可开始时获取后存数据库,下次从数据库取,注意accesstoken有效期为7200秒 //声明一个HttpWebRequest请求 string interfaceUrl = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + AccessToken; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(interfaceUrl); //设置连接超时时间 request.Timeout = 30000; request.KeepAlive = true; Encoding encodeType = Encoding.GetEncoding("UTF-8"); request.Headers.Set("Pragma", "no-cache"); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; Maxthon; .NET CLR 1.1.4322); Http STdns"; request.Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*"; request.CookieContainer = new CookieContainer(); byte[] Bytes = encodeType.GetBytes(jsonStr); request.ContentLength = Bytes.Length; request.AllowAutoRedirect = true; //发送数据 using (Stream writer = request.GetRequestStream()) { writer.Write(Bytes, 0, Bytes.Length); writer.Close(); } StringBuilder strb = new StringBuilder(); //接收数据 using (Stream reader = request.GetResponse().GetResponseStream()) { StreamReader sr = new StreamReader(reader, encodeType); strb.Append(sr.ReadToEnd()); sr.Close(); reader.Close(); } if ((strb.ToString().IndexOf("\"errcode\":42001") != -1) || (strb.ToString().IndexOf("\"errcode\":40001") != -1) || (strb.ToString().IndexOf("\"errcode\":40014") != -1) || (strb.ToString().IndexOf("\"errcode\":41001") != -1)) //access_token错误 { // AccessToken = getAccessToken(); getzmAccessToken(); return requstZmToCreatMent(jsonStr); } else { if (strb.ToString() == "{\"errcode\":0,\"errmsg\":\"ok\"}") { return true; } else { return false; } } } catch (Exception exp) { return false; } }
总结
以上所述是小编给大家介绍的微信公众号开发之设置自定义菜单实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
- Node.js入门学习笔记-IDE选择/配置之WebStorm(windows)
- Captcha插件后门分析和修复
- log4net.SignalR - 日志即时发送客户端页面
- 科学家担心的智能爆炸,真会有这一天吗?
- RSA 2018:从大会议题看2018年网络安全趋势
- Silverlight:Mouse Avoiding 躲避鼠标效果
- CTreeCtrl 控件使用总结
- 在ASP.NET MVC 4中使用Kendo UI Grid
- 每周四更面试题:True+True=?
- iis7 发布mvc 遇到的HTTP错误 403.14-Forbidden Web 服务器被配置为不列出此目录的内容
- NET中验证控件表达式汇总
- 动态执行超过4000个字符的SQL
- 在ASPNET中使用JS集锦
- 小程序又又又……
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释