.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 相关文章推荐
js checkbox(复选框) 使用集锦
Apr 28 Javascript
JavaScript 设计模式学习 Factory
Jul 29 Javascript
javascript 函数调用的对象和方法
Jul 01 Javascript
Angular学习笔记之angular的$filter服务浅析
Nov 12 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
May 31 Javascript
Angular中的$watch、$watchGroup、$watchCollection
Jun 25 Javascript
vue结合axios与后端进行ajax交互的方法
Jul 06 Javascript
jQuery实现鼠标移到某个对象时弹出显示层功能
Aug 23 jQuery
ES6 对象的新功能与解构赋值介绍
Feb 05 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
May 16 Javascript
vue实现移动端触屏拖拽功能
Aug 21 Javascript
Vue实现boradcast和dispatch的示例
Nov 13 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下将多个数组合并成一个数组的方法与实例代码
2011/02/03 PHP
php调用新浪短链接API的方法
2014/11/08 PHP
jquery select动态加载选择(兼容各种浏览器)
2013/02/01 Javascript
获取offsetTop和offsetLeft值的js代码(兼容)
2013/04/16 Javascript
深入浅析JavaScript中with语句的理解
2016/05/12 Javascript
jQuery css() 方法动态修改CSS属性
2016/09/25 Javascript
JS限制条件补全问题实例分析
2016/12/16 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
浅谈JavaScript正则表达式-非捕获性分组
2017/03/08 Javascript
Vue-cli3项目配置Vue.config.js实战记录
2018/07/29 Javascript
React项目动态设置title标题的方法示例
2018/09/26 Javascript
JS根据Unix时间戳显示发布时间是多久前【项目实测】
2019/07/10 Javascript
Nodejs环境实现socket通信过程解析
2020/07/03 NodeJs
js实现验证码干扰(动态)
2021/02/23 Javascript
python中as用法实例分析
2015/04/30 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
2016/08/30 Python
python自动截取需要区域,进行图像识别的方法
2018/05/17 Python
pycharm 将python文件打包为exe格式的方法
2019/01/16 Python
Python Pandas 获取列匹配特定值的行的索引问题
2019/07/01 Python
python读出当前时间精度到秒的代码
2019/07/05 Python
基于Django的乐观锁与悲观锁解决订单并发问题详解
2019/07/31 Python
Python3实现mysql连接和数据框的形成(实例代码)
2020/01/17 Python
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
2020/05/17 Python
Pandas对每个分组应用apply函数的实现
2020/12/13 Python
HTML5在手机端实现视频全屏展示方法
2020/11/23 HTML / CSS
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
捷克母婴用品购物网站:Feedo.cz
2020/12/28 全球购物
什么是serialVersionUID
2016/03/04 面试题
小学生爱国演讲稿
2014/04/25 职场文书
法制教育演讲稿
2014/09/10 职场文书
工作能力自我评价2015
2015/03/05 职场文书
中秋节晚会开场白
2015/05/29 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书
导游词之无锡丝业博物馆
2019/11/12 职场文书
SQL实现LeetCode(176.第二高薪水)
2021/08/04 MySQL
Redis Lua脚本实现ip限流示例
2022/07/15 Redis