.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 学习笔记 element属性控制
Jul 23 Javascript
Jquery跨域获得Json时invalid label错误的解决办法
Jan 11 Javascript
js操作iframe的一些方法介绍
Jun 25 Javascript
javascript对下拉列表框(select)的操作实例讲解
Nov 29 Javascript
JavaScript中输出标签的方法
Aug 27 Javascript
$("").click与onclick的区别示例介绍
Sep 25 Javascript
原生js验证简洁注册登录页面
Dec 17 Javascript
Bootstrap 轮播(Carousel)插件
Dec 26 Javascript
JavaScript执行环境及作用域链实例分析
Aug 01 Javascript
layui固定下拉框的显示条数(有滚动条)的方法
Sep 10 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
Feb 24 Javascript
原生微信小程序开发中 redux 的使用详解
Feb 18 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
PHP+MySQL5.0中文乱码解决方法
2006/11/20 PHP
PHP中,文件上传
2006/12/06 PHP
php面向对象全攻略 (十四) php5接口技术
2009/09/30 PHP
php自定文件保存session的方法
2014/12/10 PHP
用php定义一个数组最简单的方法
2019/10/04 PHP
让firefox支持IE的一些方法的javascript扩展函数代码
2010/01/02 Javascript
基于jQuery实现的Ajax 验证用户名是否存在的实现代码
2011/04/06 Javascript
Javascript 倒计时源代码.(时.分.秒) 详细注释版
2011/05/09 Javascript
JS字符串累加Array不一定比字符串累加快(根据电脑配置)
2012/05/14 Javascript
JavaScript prototype属性深入介绍
2012/11/27 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
jquery实现div阴影效果示例代码
2013/09/16 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
JavaScript设计模式之外观模式实例
2014/10/10 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
2014/12/05 Javascript
Jquery对select的增、删、改、查操作
2015/02/06 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
AngularJS上拉加载问题解决方法
2016/05/23 Javascript
深入理解Ajax的get和post请求
2016/06/02 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
解决vue项目使用font-awesome,build后路径的问题
2018/09/01 Javascript
js实现时分秒倒计时
2019/12/03 Javascript
python 随机数生成的代码的详细分析
2011/05/15 Python
python 正确保留多位小数的实例
2018/07/16 Python
python读写配置文件操作示例
2019/07/03 Python
对python中的装包与解包实例详解
2019/08/24 Python
Python爬虫之App爬虫视频下载的实现
2020/12/08 Python
html5将图片转换成base64的实例代码
2016/09/21 HTML / CSS
Smallable意大利家庭概念店:设计师童装及家居装饰
2018/01/08 全球购物
利用异或运算实现两个无符号数的加法运算
2013/12/20 面试题
学生会竞聘书范文
2014/03/31 职场文书
行政文员实习自我鉴定范文
2014/09/14 职场文书
2014年妇幼保健工作总结
2014/12/08 职场文书
2015年化工厂工作总结
2015/05/04 职场文书
2015年度公共机构节能工作总结
2015/05/26 职场文书
B站评分公认最好看的动漫,你的名字评分9.9,第六备受喜欢
2022/03/18 日漫