本实例是为了实现在管理后台实现微信菜单的添加删除管理。

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

///

/// 向微信服务器请求创建自定义菜单

///

///

///

///

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;

}

}

总结

以上所述是小编给大家介绍的微信公众号开发之设置自定义菜单实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

java 微信自定义菜单开发_微信公众号开发之设置自定义菜单实例代码【java版】...相关推荐

  1. 【微信开发】WeChat公众号开发接口及完整过程

    直接上代码 constant.java为基础常量类 import com.douples.common.util.CommonUtil; import com.douples.framework.ut ...

  2. 微信答题怎么做_分享公众号答题制作步骤

    小编今天要和大家分享的是订阅号怎么做答题活动,有的小伙伴会问订阅号可以做答题活动吗,答案是可以的,那么我们接下来分享下微信答题小程序怎么做. 微信答题系统的题目添加,在题目列表进行添加题目,可以一次性 ...

  3. Java微信公众号开发(附源码!!!)

    笔者最近在为一个艺考服务团队开发手机端的服务,由于开发app需要的时间较长,所以选择开发微信公众号.本人比较擅长Java开发,所以本文是基于Java语言的公众号开发.话不多说,直接进入正题. 准备工作 ...

  4. 微信公众号开发,扫描二维码事件推送丢失参数问题

    需求场景: 每个用户都有自己的推广二维码,分享自己推广二维码,别人扫码后跳转关注公众号,关注后绑定推荐关系. 用到技术点: 1.生成带参数二维码 2.接收事件推送,这里主要是关注和扫带参数二维码两个事 ...

  5. java自定义菜单跳转页面_微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解...

    微信公众号开发 自定义菜单 请先读完本文再进行配置开发 请先前往微信平台开发者文档阅读"网页授权获取用户基本信息"的接口说明 在微信公众账号开发中,往往有定义一个菜单,然后用户点击 ...

  6. 慕课网_《Java微信公众号开发进阶》学习总结

    时间:2017年08月12日星期六 说明:本文部分内容均来自慕课网.@慕课网:http://www.imooc.com 教学源码:http://img.mukewang.com/down/... 学习 ...

  7. 微信公众号开发--自定义菜单跳转页面并获取用户信息(续)

    之前写过一篇微信公众号开发–自定义菜单跳转页面并获取用户信息 由于当时是刚学习微信公众号开发当时的思路虽然可行,不过不是最好的,最近也用到了需要获取用户信息的地方,再次整理一下. 流程 注意点 ### ...

  8. 微信公众号开发之实现自定义微信公众号菜单和跳转第三方网页

    自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCE ...

  9. Java 微信公众号开发_学习笔记

    一.课程介绍 本套课程的学习内容,开发语言 微信公众号介绍,申请以及后台设置详解 编辑模式下的消息回复,菜单建立,素材管理等 开发前的环境搭建以及工具准备 开发者模式的切换.以及消息的接收与响应 百度 ...

最新文章

  1. asp自定义函数可以返回数组或者对象
  2. __cdecl __stdcall区别-转
  3. Dataset之JFT:JFT/FastEval14k数据集的简介、下载、案例应用之详细攻略
  4. boost::hana::on用法的测试程序
  5. python 速度 memmap_使用python测量文件的读写速度
  6. STM32关闭CAN外设的自动重传功能
  7. Python简单的抓取静态网页内容
  8. php with语法,Yii框架关联查询with用法分析
  9. 从集合大小的定义到数学结构-解决了多年的疑惑
  10. 42表盘直径是从哪测量_万用表测量电容容量的方
  11. 想找一些外文文献,有哪些靠谱的外文文献网站推荐?
  12. 点云配准icp算法推导
  13. 通达信大资金进出指标公式
  14. 程序员分七个等级,你属于哪一级?
  15. 新手进阶建模 (写论文摘要和看论文)
  16. [高精度]高精度的封装
  17. 浪潮ps9.0 oracle,浪潮ERP-PS V9.1安装手册.doc
  18. Tiny4412 在linux下的dnw使用
  19. 通用课程表教师表php,利用Access实现学校课程表的科学管理
  20. iOS In-App Purchase 内购之创建内购产品

热门文章

  1. PAT乙级全套超详细题解【建议收藏】
  2. 深度优先搜索(DFS)相关习题
  3. 一道有意思的数据库题
  4. 如何转载别人的CSDN文章
  5. Keepalived运行命令
  6. jQuery的Password Validation插件
  7. Java之Character类
  8. linux序列比对程序,序列比对软件简单使用教程
  9. Oracle数据库之子查询
  10. 【Spring注解系列14】@Profile进行环境切换