当前位置: 首页 > news >正文

.NET微信公众号开发-2.0创建自定义菜单

一.前言

开发之前,我们需要阅读官方的接口说明文档,不得不吐槽一下,微信的这个官方文档真的很烂,但是,为了开发我们需要的功能,我们也不得不去看这些文档.

接口文档地址:http://mp.weixin.qq.com/wiki/13/43de8269be54a0a6f64413e4dfa94f39.html

看了这些个文档,基本意思明白了,就是我们把我们要创建的菜单创建好,post到微信的服务器上面,微信服务器然后给我们一些状态码,从而判断我们的菜单是否创建成功,只是在发送json数据以前我们要做一 些身份验证。

二.准备工作

首先把我们要创建的菜单写在一个txt文本中:

 {
     "button":[
       {
            "type":"view",
            "name":"付停车费",
            "url":"http://www.baidu.com"
   
       },{
           "name":"个人中心",
           "sub_button":[
           {    
               "type":"view",
               "name":"个人信息",
               "url":"http://www.baidu.com"
            },
            {
               "type":"view",
               "name":"订单查询",
               "url":"http://www.baidu.com"
            },
            {
               "type":"view",
               "name":"使用帮助",
               "url":"http://www.baidu.com"
            },
            {
               "type":"view",
               "name":"下载APP",
               "url":"http://www.baidu.com"
            }]
       }]
 }

三.开始编码

  首先我们创建一个一般处理程序createMenu.ashx.

        public string  access_token { get; set; }

        protected void Page_Load(object 

sender, EventArgs e)
        {
            FileStream fs1 = new FileStream(Server.MapPath(".") + "\\menu.txt", FileMode.Open);
            StreamReader sr = new StreamReader(fs1, Encoding.GetEncoding("UTF-8"));
            string menu = sr.ReadToEnd();
            sr.Close();
            fs1.Close();
            var str = GetPage("https://api.weixin.qq.com/cgi-bin/token?

grant_type=client_credential&appid=wxd811f5114e3e56f3&secret=76eb33f66129692da16d148cb3c024f1", "");
            JObject jo = JObject.Parse(str);
            access_token = jo["access_token"].ToString();
            GetPage("https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + access_token + "", menu);
        }

  这里需要注意的是appid,secret这些参数需要换成我们自己的,这些参数我们可以放在配置文件中。也可以单独的放在一个帮助类里面。

     同时在创建菜单的时候我们需要带上我的access_token这个令牌来验证我们的身份,那么我们首先要做的就是获取我们的这个令牌,那个这个令牌要如何获取了,我们可以通过一个接口获取 ,只需要传递我们的appid和secret这个两个参数

{"access_token":"jVLAT9Rp9dNgxI4pb4RWlSx_9HJLXICmk_uWDlRtAug8wcaWhZZ10eqZCYRZrEwCIJf1-vBhS9YEX00Dj7q__lJCyTIWOxTruOd25opkf-0","expires_in":7200}

  上面的GetPage方法的返回值。这样我们就可以获取我们的令牌了。

      最后一步:带上我们的令牌,post我们的json菜单数据就可以创建菜单了。

      当你看到如下代码:

{"errcode":0,"errmsg":"ok"}

  说明你的菜单创建成功了。

四:GetPage

    代码如下:

        public string GetPage(string posturl, 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(posturl) 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;
                Response.Write(content);
                return content;
            }
            catch (Exception ex)
            {
                string err = ex.Message;
                return string.Empty;
            }
        }

五.微信公众号开发系列

1.0初始微信公众号

2.0创建自定义菜单

3.0查询自定义菜单

4.0公众号消息处理

5.0微信支付

6.0模板消息

转载于:https://www.cnblogs.com/fenglingyi/p/4647717.html

相关文章:

  • shell学习小结
  • Linux下的passwd和shadow文件
  • 搜索进阶——棋盘问题
  • Hadoop和大数据:60款顶级开源工具
  • 问题-Delphi编译到最后Linking时总是出现与ntdll.dll有关的错误还有Fatal Error Out of memory错误...
  • 《重构:改善既有代码的设计》—第2章2.7节重构与性能
  • 【C/C++】知识点
  • SWIFT中获取配置文件路径的方法
  • 《Arduino实战》——1.8 小结
  • hdu 4035 可能性DP 成都网络游戏
  • 如何用Nagios远程执行插件(NRPE)来检测服务器内存使用率
  • Android-往来:添加到联系人
  • 《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——1.1 硬件系统资源
  • ajaxFileUpload plugin上传文件 chrome、Firefox中出现SyntaxError:unexpected token
  • 《C++编程风格(修订版)》——2.6 动态内存的回收
  • 【知识碎片】第三方登录弹窗效果
  • Angularjs之国际化
  • bearychat的java client
  • C学习-枚举(九)
  • Hexo+码云+git快速搭建免费的静态Blog
  • JavaScript标准库系列——Math对象和Date对象(二)
  • MySQL数据库运维之数据恢复
  • PAT A1017 优先队列
  • use Google search engine
  • webgl (原生)基础入门指南【一】
  • 订阅Forge Viewer所有的事件
  • 高度不固定时垂直居中
  • 回流、重绘及其优化
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 基于组件的设计工作流与界面抽象
  • 技术:超级实用的电脑小技巧
  • 解析带emoji和链接的聊天系统消息
  • 前端自动化解决方案
  • 使用API自动生成工具优化前端工作流
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 收藏好这篇,别再只说“数据劫持”了
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • Mac 上flink的安装与启动
  • 阿里云服务器如何修改远程端口?
  • ​【已解决】npm install​卡主不动的情况
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • #13 yum、编译安装与sed命令的使用
  • (175)FPGA门控时钟技术
  • (Python) SOAP Web Service (HTTP POST)
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (离散数学)逻辑连接词
  • ***利用Ms05002溢出找“肉鸡
  • ***原理与防范
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET Framework .NET Core与 .NET 的区别
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 服务 ServiceController