.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 css float属性的特殊写法
Nov 13 Javascript
JavaScript与DropDownList 区别分析
Jan 01 Javascript
jquery ajax提交表单数据的两种实现方法
Apr 29 Javascript
用dtree实现树形菜单 dtree使用说明
Oct 17 Javascript
JS嵌套函数调用上下文的问题解决
Mar 26 Javascript
JavaScript数据类型检测代码分享
Jan 26 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
Sep 07 Javascript
微信小程序 radio单选框组件详解及实例代码
Jan 10 Javascript
解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
Jun 05 Javascript
浅谈Angular4实现热加载开发旅程
Sep 08 Javascript
vue实现全匹配搜索列表内容
Sep 26 Javascript
vue中是怎样监听数组变化的
Oct 24 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中获取url与物理路径的总结
2013/06/21 PHP
一段好玩的JavaScript代码
2006/12/01 Javascript
JS中eval函数的使用示例
2013/07/21 Javascript
JavaScript包装对象使用介绍
2013/08/29 Javascript
Query中click(),bind(),live(),delegate()的区别
2013/11/19 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
javascript模拟实现ajax加载框实例
2014/10/15 Javascript
node.js使用npm 安装插件时提示install Error: ENOENT报错的解决方法
2014/11/20 Javascript
Nodejs学习笔记之Stream模块
2015/01/13 NodeJs
浅谈javascript中的DOM方法
2015/07/16 Javascript
jquery判断input值不为空的方法
2016/06/05 Javascript
Node.js学习教程之HTTP/2服务器推送【译】
2017/10/31 Javascript
nodejs实现大文件(在线视频)的读取
2020/10/16 NodeJs
纯js代码生成可搜索选择下拉列表的实例
2018/01/11 Javascript
angular2中Http请求原理与用法详解
2018/01/11 Javascript
详解React中setState回调函数
2018/06/14 Javascript
通过实践编写优雅的JavaScript代码
2019/05/30 Javascript
JavaScript中0、空字符串、'0'是true还是false的知识点分享
2019/09/16 Javascript
使用 JavaScript 创建并下载文件(模拟点击)
2019/10/25 Javascript
讲解Python中for循环下的索引变量的作用域
2015/04/15 Python
替换python字典中的key值方法
2018/07/06 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
2018/10/11 Python
Python中fnmatch模块的使用详情
2018/11/30 Python
Python基础之循环语句用法示例【for、while循环】
2019/03/23 Python
在Django下测试与调试REST API的方法详解
2019/08/29 Python
删除pycharm鼠标右键快捷键打开项目的操作
2021/01/16 Python
CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大
2012/12/10 HTML / CSS
简历中自我评价分享
2013/10/09 职场文书
酒店个人求职信范文
2014/01/25 职场文书
团结就是力量演讲稿
2014/05/21 职场文书
关于清明节的演讲稿
2014/09/13 职场文书
2014年世界艾滋病日宣传活动总结
2014/11/18 职场文书
毕业设计论文评语
2014/12/31 职场文书
redis 查看所有的key方式
2021/05/07 Redis
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang
win10重装系统后上不了网怎么办 win10重装系统网络故障的解决办法
2022/07/23 数码科技