.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 相关文章推荐
HTML中事件触发列表与解说
Jul 09 Javascript
JavaScript面向对象知识串结(读JavaScript高级程序设计(第三版))
Jul 17 Javascript
jQuery的缓存机制浅析
Jun 07 Javascript
自编jQuery插件实现模拟alert和confirm
Sep 01 Javascript
javascript常用功能汇总
Jul 05 Javascript
基于JavaScript代码实现随机漂浮图片广告
Jan 05 Javascript
深入浅析JavaScript中的Function类型
Jul 09 Javascript
Vue实现双向数据绑定
May 03 Javascript
理解javascript async的用法
Aug 22 Javascript
Layui 数据表格批量删除和多条件搜索的实例
Sep 04 Javascript
使用Karma做vue组件单元测试的实现
Jan 16 Javascript
Vue-resource安装过程及使用方法解析
Jul 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
利用 window_onload 实现select默认选择
2006/10/09 PHP
laravel5使用freetds连接sql server的方法
2018/12/07 PHP
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
PPK 谈 JavaScript 的 this 关键字 [翻译]
2009/09/29 Javascript
js中document.write的那点事
2014/12/12 Javascript
JavaScript中诡异的delete操作符
2015/03/12 Javascript
Javascript实现鼠标框选操作  不是点击选取
2016/04/14 Javascript
浅析JavaScript Array和string的转换(推荐)
2016/05/20 Javascript
AngularJS 过滤器的简单实例
2016/07/27 Javascript
JavaScript数据结构之二叉树的计数算法示例
2017/04/13 Javascript
vue.js国际化 vue-i18n插件的使用详解
2017/07/07 Javascript
关于js对textarea换行符的处理方法浅析
2018/08/03 Javascript
如何用JavaScript实现功能齐全的单链表详解
2019/02/11 Javascript
Vue + Elementui实现多标签页共存的方法
2019/06/12 Javascript
微信小程序实现限制用户转发功能的实例代码
2020/02/22 Javascript
JS关闭子窗口并且刷新上一个窗口的实现示例
2020/03/10 Javascript
ant design vue 表格table 默认勾选几项的操作
2020/10/31 Javascript
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
windows下python模拟鼠标点击和键盘输示例
2014/02/28 Python
使用python爬虫获取黄金价格的核心代码
2018/06/13 Python
python实现AES和RSA加解密的方法
2019/03/28 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
2020/05/24 Python
详解CSS3:overflow属性
2020/11/17 HTML / CSS
美国Lolё官网:购买大胆而美丽的女性运动服装
2017/05/22 全球购物
应届毕业生专业个人求职自荐信格式
2013/11/20 职场文书
机关门卫岗位职责
2013/12/30 职场文书
员工培训邀请函
2014/01/11 职场文书
汉语言文学专业求职信
2014/06/19 职场文书
软环境建设心得体会
2014/09/09 职场文书
后勤个人工作总结
2015/02/28 职场文书
工作感言一句话
2015/08/01 职场文书
2016年学校综治宣传月活动总结
2016/03/16 职场文书
社区结对共建协议书
2016/03/23 职场文书
SQL Server中锁的用法
2022/05/20 SQL Server