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


Posted in Javascript onJuly 16, 2015

一.前言

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

接口文档地址: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;
      }
    }

以上所述就是本文的全部内容了,希望大家能够喜欢

Javascript 相关文章推荐
javascript模版引擎-tmpl的bug修复与性能优化分析
Oct 23 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
Jan 15 Javascript
THREE.JS入门教程(2)着色器-上
Jan 24 Javascript
jQuery中replaceAll()方法用法实例
Jan 16 Javascript
Vue.js实现移动端短信验证码功能
Mar 29 Javascript
jQuery、layer实现弹出层的打开、关闭功能
Jun 28 jQuery
Angular4学习教程之HTML属性绑定的方法
Jan 04 Javascript
详谈js的变量提升以及使用方法
Oct 06 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
Aug 27 Javascript
小程序实现长按保存图片的方法
Dec 31 Javascript
Vue的全局过滤器和私有过滤器的实现
Apr 20 Javascript
JavaScript中10个Reduce常用场景技巧
Jun 21 Javascript
初识Javascript小结
Jul 16 #Javascript
浅谈javascript中的DOM方法
Jul 16 #Javascript
详细分析JavaScript函数定义
Jul 16 #Javascript
jQuery时间轴插件使用详解
Jul 16 #Javascript
jQuery实现定时读取分析xml文件的方法
Jul 16 #Javascript
Javascript函数的参数
Jul 16 #Javascript
Javascript简单改变表单元素背景的方法
Jul 15 #Javascript
You might like
支持oicq头像的留言簿(一)
2006/10/09 PHP
解析argc argv在php中的应用
2013/06/24 PHP
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
CI框架整合smarty步骤详解
2016/05/19 PHP
详解PHP中的外观模式facade pattern
2018/02/05 PHP
ThinkPHP5+Layui实现图片上传加预览功能
2018/08/17 PHP
php项目中类的自动加载实例讲解
2019/09/12 PHP
textContent在Firefox下与innerText等效的属性
2007/05/12 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
JavaScript学习笔记记录我的旅程
2012/05/23 Javascript
javascript alert乱码的解决方法
2013/11/05 Javascript
JQuery 控制内容长度超出规定长度显示省略号
2014/05/23 Javascript
jquery判断复选框是否被选中的方法
2015/10/16 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
2016/02/25 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
2017/01/05 Javascript
js实现一个猜数字游戏
2017/03/31 Javascript
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
2017/05/08 jQuery
jQuery插件DataTables分页开发心得体会
2017/08/22 jQuery
vue+node+webpack环境搭建教程
2017/11/05 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
2018/09/03 jQuery
详解一次Vue低版本安卓白屏问题的解决过程
2019/05/30 Javascript
微信小程序实现限制用户转发功能的实例代码
2020/02/22 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
原生js实现日期选择插件
2020/05/21 Javascript
浅谈vue.watch的触发条件是什么
2020/11/07 Javascript
python魔法方法-自定义序列详解
2016/07/21 Python
Python使用xlwt模块操作Excel的方法详解
2018/03/27 Python
python/Matplotlib绘制复变函数图像教程
2019/11/21 Python
Python 捕获代码中所有异常的方法
2020/08/03 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
英国手机壳购买网站:Case Hut
2019/04/11 全球购物
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
管理学专业个人求职信范文
2013/09/21 职场文书
2015年大学生工作总结
2015/04/21 职场文书
退休欢送会主持词
2015/07/01 职场文书
三严三实学习心得体会(精选N篇)
2016/01/05 职场文书