自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。
自定义菜单的介绍,可以看官方开发文档http://mp.weixin.qq.com/wiki/home/index.html
下面是我自己写的一个实现自定义菜单的小Dome
一、先定义了一个Json字符串,格式要按照微信提供的Json格式
        //创建微信菜单JSON字符串
private string GetWXMenuStr()
{
string weixin1 = "";
weixin1 += "{\n";
weixin1 += "\"button\":[\n";
weixin1 += "{\n";
// weixin1 += "\"type\":\"click\",\n";
//第一个菜单
weixin1 += "\"name\":\"公共信息\",\n";
weixin1 += "\"sub_button\":[\n"; weixin1 += "{\n";
weixin1 += "\"type\":\"click\",\n";
weixin1 += "\"name\":\"通知公告\",\n";
weixin1 += "\"key\":\"11\"\n";
weixin1 += "},\n"; weixin1 += "{\n";
weixin1 += "\"type\":\"click\",\n";
weixin1 += "\"name\":\"工作动态\",\n";
weixin1 += "\"key\":\"12\"\n";
weixin1 += "},\n"; weixin1 += "{\n";
weixin1 += "\"type\":\"click\",\n";
weixin1 += "\"name\":\"政策法规\",\n";
weixin1 += "\"key\":\"13\"\n";
weixin1 += "},\n"; weixin1 += "{\n";
weixin1 += "\"type\":\"click\",\n";
weixin1 += "\"name\":\"经济视野\",\n";
weixin1 += "\"key\":\"14\"\n";
weixin1 += "},\n"; weixin1 += "{\n";
weixin1 += "\"type\":\"click\",\n";
weixin1 += "\"name\":\"专题报道\",\n";
weixin1 += "\"key\":\"15\"\n";
weixin1 += "}]\n";
weixin1 += "},\n";
//第二个菜单
weixin1 += "{\n";
//weixin1 += "\"type\":\"click\",\n";
weixin1 += "\"name\":\"公共服务\",\n";
weixin1 += "\"sub_button\":[\n";
weixin1 += "{\n";
weixin1 += "\"type\":\"click\",\n";
weixin1 += "\"name\":\"企业之窗\",\n";
weixin1 += "\"key\":\"21\"\n";
weixin1 += "},\n"; weixin1 += "{\n";
weixin1 += "\"type\":\"click\",\n";
weixin1 += "\"name\":\"金融服务\",\n";
weixin1 += "\"key\":\"22\"\n";
weixin1 += "},\n"; weixin1 += "{\n";
weixin1 += "\"type\":\"click\",\n";
weixin1 += "\"name\":\"创业指导\",\n";
weixin1 += "\"key\":\"23\"\n";
weixin1 += "},\n"; weixin1 += "{\n";
weixin1 += "\"type\":\"click\",\n";
weixin1 += "\"name\":\"管理服务\",\n";
weixin1 += "\"key\":\"24\"\n";
weixin1 += "},\n"; weixin1 += "{\n";
weixin1 += "\"type\":\"click\",\n";
weixin1 += "\"name\":\"法律服务\",\n";
weixin1 += "\"key\":\"25\"\n";
weixin1 += "}]\n";
weixin1 += "},\n";
//第三个菜单(view类型的)
weixin1 += "{\n";
weixin1 += "\"name\":\"互动交流\",\n";
weixin1 += "\"sub_button\":[\n";
weixin1 += "{\n";
weixin1 += "\"type\":\"view\",\n";
weixin1 += "\"name\":\"注册\",\n";
weixin1 += "\"url\":\"http://1532618rl0.iok.la/Register.aspx\"\n";
weixin1 += "},\n"; weixin1 += "{\n";
weixin1 += "\"type\":\"view\",\n";
weixin1 += "\"name\":\"登录\",\n";
weixin1 += "\"url\":\"http://1532618rl0.iok.la\"\n";
weixin1 += "}]\n";
weixin1 += "}\n";
weixin1 += "}]\n"; weixin1 += "}\n";
return weixin1;
}

二、定义执行菜单请求方法

        /// <summary>
        /// 执行菜单请求
        /// </summary>
        /// <param name="url">微信提供的自定义菜单接口地址</param>
        /// <param name="postData">实现自定义菜单的Json字符串</param>
        public void PostMenuData(string url, string postData)
        {
            Stream outstream = null;
            Stream instream = null;
            StreamReader sr = null;
            HttpWebResponse response = null;
            HttpWebRequest request = null;
            Encoding encoding = Encoding.UTF8;
            byte[] data = encoding.GetBytes(postData);
            // 准备请求...
            try
            {
                // 设置参数
                request = WebRequest.Create(url) as HttpWebRequest;
                CookieContainer cookieContainer = new CookieContainer();
                request.CookieContainer = cookieContainer;
                request.AllowAutoRedirect = true;
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = data.Length;
                outstream = request.GetRequestStream();
                outstream.Write(data, 0, data.Length);
                outstream.Close();
                //发送请求并获取相应回应数据
                response = request.GetResponse() as HttpWebResponse;
                //直到request.GetResponse()程序才开始向目标网页发送Post请求
                instream = response.GetResponseStream();
                sr = new StreamReader(instream, encoding);
                //返回结果网页(html)代码
                string content = sr.ReadToEnd();
                string err = string.Empty;
            }
            catch (Exception ex)
            {
                string err = ex.Message;
            }
        }

三、实现自定义菜单

       private string postUrl = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=";
//创建自定义菜单
public void CreateWxMenu()
{
string weixin1 = GetWXMenuStr();//获取菜单Json字符串
string AccessToken = Helper.IsExistAccess_Token();//获取AccessToken
PostMenuData(postUrl + AccessToken, weixin1);//通过接口实现自定义菜单
}

四、在程序运行的起始页调用CreateWxMenu()方法即可。

其中获取AccessToken的方法是调用前面写的文章封装的一个Helper方法实现的,地址http://www.cnblogs.com/zhangjd/p/5694737.html

C#微信公众号——自定义菜单的更多相关文章

  1. 微信公众号自定义菜单中添加emoji表情

    做微信公众号开发,可能会遇到如何加入emoji表情的问题.今天在“海南旅游小管家”公众号的菜单中加入了emoji表情,特此记录备忘. 1.登录微信公众号,在左侧找到[开发者工具]菜单,点击进入,找到[ ...

  2. vue 仿写微信公众号自定义菜单

    先看效果图 代码参考 <template> <div> <!-- 公众号设置 --> <el-col :span="24" style=& ...

  3. .net mvc 微信公众号 自定义菜单

    官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141013&token=&lang=zh_CN ...

  4. 通过微信公众号API复制公众号自定义菜单同时增加子菜单方法

    主要的原因是再不破坏公众号以前的菜单的基础上增加自定义菜单,主要步骤如下: 1.通过微信提供的微信公众平台接口调试工具获取公众号的所有自定义菜单 网址:https://mp.weixin.qq.com ...

  5. 微信公众平台自定义菜单新增扫一扫、发图片、发位置 LBS运作更便捷

    今天微信公众平台发布更新,自定义菜单新增扫一扫.发图片.发送位置等功能,这对于有意挖掘微信LBS服务的运营者来说更便捷了,订阅号不用返回微信界面就能扫图.发送图片.调用地理位置,用户体验更友好,自然也 ...

  6. 微信公众平台自定义菜单PHP开发

    微信公众平台自定义菜单PHP开发,微信公众平台自定义菜单是如何实现的呢?其实很简单,首先在微信公众平台升级为服务号,获取appid和appsecret,然后根据这2个参数获取access_token, ...

  7. 微信公众平台自定义菜单及高级接口PHP SDK(转)

    本文介绍介绍微信公众平台自定义菜单及高级接口的PHP SDK及使用方法. 作者 方倍工作室 修正记录: 2014.05.03 v1.0 方倍工作室 http://www.cnblogs.com/txw ...

  8. 微信公众平台自定义菜单及高级接口PHP SDK

    本文介绍介绍微信公众平台自定义菜单及高级接口的PHP SDK及使用方法. 作者 方倍工作室 修正记录: 2014.05.03 v1.0 方倍工作室 http://www.cnblogs.com/txw ...

  9. java版微信公众平台自定义菜单创建代码实现

    微信公众平台自定义菜单创建代码实现—java版 搞了两天的自定义菜单,终于搞定了,现在分享下心得,以便后来者少走弯路...... 好了,先看先微信官方的API 官方写的很详细,但是我看完后很茫然,不知 ...

随机推荐

  1. vue.js 配置移动端的url Scheme和iOS端配置url Scheme

    假如urlScheme:baibai:// 一.vue.js端的配置: 1.通过html标签跳转: <p href="baibai://"></p> 2.通 ...

  2. 抓取Android应用的log

    今天测试软件时,遇到一个bug,因为开发说那边不复现,所以为了更好追踪这个问题,需要抓取复现步骤地log. 在网上查了相关资料,同时结合自己遇到的问题,总结如下. 1. 抓取Android 应用log ...

  3. go语言defer panic recover用法总结

    defer defer是go提供的一种资源处理的方式.defer的用法遵循3个原则 在defer表达式被运算的同时,defer函数的参数也会被运算.如下defer的表达式println运算的同时,其入 ...

  4. 1-1 maven 学习笔记(1-6章)

    一.基础概念 1.Maven作为Apache组织中颇为成功的开源项目,主要服务于基于Java平台的项目构建,依赖管理和项目信息管理.从清理,编译,测试到生成报告,到打包部署,自动化构建过程. 还可以跨 ...

  5. maven 技术总结

    1.版本统一控制 在 properties中配置一个参数,在添加依赖时 通过 version标签 限定版本 <properties> <org.springframework.ver ...

  6. MySql (MariaDB)的varchar字段的存储的是字符还是字节

    关于varchar字段: 在version4之前,按字节: version5之后,按字符. 现在普遍都按字符算:无论中文英文,都算一个字符 既: varchar(10) == '123456789a' ...

  7. CentOS7安装Postgresql

    执行命令 Yum install postgresql-server Yum install postgresql-contrib 安装完成后,检查postgresql的服务状态 Systemctl ...

  8. FFmpeg视频处理

    FFmpeg是一个用于音视频处理的自由软件,被广泛用于音视频开发.FFmpeg功能强大,本文主要介绍如何使用FFmpeg命令行工具进行简单的视频处理. 安装FFmpeg可以在官网下载各平台软件包或者静 ...

  9. Matlab绘图基础——绘制等高线图

    % 等高线矩阵的获取 C = contourc(peaks(20),3);              % 获取3个等级的等高线矩阵 % 等高线图形的绘制 contour(peaks(20),10);c ...

  10. ElasticSearch之 控制相关度原理讲解

    控制相关度 相关度评分背后的理论 如何计算评分的 Lucene 使用布尔模型(Boolean model) 查找匹配文档 并主要的借鉴了 词频/逆向文档频率(term frequency/invers ...