.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 相关文章推荐
jQuery EasyUI API 中文文档 - ValidateBox验证框
Oct 06 Javascript
单击按钮显示隐藏子菜单经典案例
Jan 04 Javascript
jquery live()重复绑定的解决方法介绍
Jan 03 Javascript
深入理解JavaScript系列(28):设计模式之工厂模式详解
Mar 03 Javascript
javascript框架设计之类工厂
Jun 23 Javascript
jquery实现两边飘浮可关闭的对联广告
Nov 27 Javascript
全面了解JavaScript对象进阶
Jul 19 Javascript
jQuery实现模拟flash头像裁切上传功能示例
Dec 11 Javascript
laravel5.3 vue 实现收藏夹功能实例详解
Jan 21 Javascript
微信小程序传值以及获取值方法的详解
Apr 29 Javascript
JavaScript多种滤镜算法实现代码实例
Dec 10 Javascript
vue实现从外部修改组件内部的变量的值
Jul 30 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
discuz7 phpMysql操作类
2009/06/21 PHP
PHP环境中Memcache的安装和使用
2015/11/05 PHP
php生成图片缩略图功能示例
2017/02/22 PHP
jQuery对象与DOM对象之间的转换方法
2010/04/15 Javascript
不提示直接关闭网页窗口的JS示例代码
2013/12/17 Javascript
2014年50个程序员最适用的免费JQuery插件
2014/12/15 Javascript
NodeJs中的VM模块详解
2015/05/06 NodeJs
js实现表单Radio切换效果的方法
2015/08/17 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
2016/05/12 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
2016/07/05 Javascript
深入理解javascript的getTime()方法
2017/02/16 Javascript
javascript 面向对象function详解及实例代码
2017/02/28 Javascript
基于JavaScript实现瀑布流效果
2017/03/29 Javascript
jquery dataTable 后台加载数据并分页实例代码
2017/06/07 jQuery
JS创建Tag标签的方法详解
2017/06/09 Javascript
JS数组操作之增删改查的简单实现
2017/08/21 Javascript
React Native之prop-types进行属性确认详解
2017/12/19 Javascript
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
2018/10/26 jQuery
微信小程序实现日历效果
2018/12/28 Javascript
vue实现购物车小案例
2019/09/27 Javascript
python爬虫爬取网页表格数据
2018/03/07 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
2019/11/07 Python
python对Excel的读取的示例代码
2020/02/14 Python
python实现逢七拍腿小游戏的思路详解
2020/05/26 Python
澳大利亚电商Catch新西兰站:Catch.co.nz
2020/05/30 全球购物
优秀党员主要事迹
2014/01/19 职场文书
老龄工作先进事迹
2014/08/15 职场文书
国际贸易本科毕业生求职信
2014/09/26 职场文书
2014年检验科工作总结
2014/11/22 职场文书
2014年学校德育工作总结
2014/12/05 职场文书
西安大雁塔导游词
2015/02/10 职场文书
2015年施工员工作总结范文
2015/04/20 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
css 中多种边框的实现小窍门
2021/04/07 HTML / CSS
详解Python中下划线的5种含义
2021/07/15 Python
Vue OpenLayer 为地图绘制风场效果
2022/04/24 Vue.js