.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 类与静态类的实现
Apr 01 Javascript
基于jQuery的弹出消息插件 DivAlert之旅(一)
Apr 01 Javascript
javascript中的previousSibling和nextSibling的正确用法
Sep 16 Javascript
基于Bootstrap重置输入框内容按钮插件
May 12 Javascript
jQuery提示插件qTip2用法分析(支持ajax及多种样式)
Jun 08 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
Jul 12 jQuery
JS/HTML5游戏常用算法之追踪算法实例详解
Dec 12 Javascript
VeeValidate 的使用场景以及配置详解
Jan 11 Javascript
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
Jun 10 jQuery
vue遍历生成的输入框 绑定及修改值示例
Oct 30 Javascript
jquery实现拖拽添加元素功能
Dec 01 jQuery
8个非常实用的Vue自定义指令
Dec 15 Vue.js
初识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
实用函数3
2007/11/08 PHP
PHP版本常用的排序算法汇总
2015/12/20 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
2018/05/10 PHP
Laravel 6.2 中添加了可调用容器对象的方法
2019/10/22 PHP
javascript引用对象的方法代码
2007/08/13 Javascript
JS调用CS里的带参方法实例
2013/08/01 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
2014/01/11 Javascript
使用node.js 获取客户端信息代码分享
2014/11/26 Javascript
jQuery类选择器用法实例
2014/12/23 Javascript
JavaScript通过字典进行字符串翻译转换的方法
2015/03/19 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
2016/07/28 Javascript
jQuery中的100个技巧汇总
2016/12/15 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
利用ECharts.js画K线图的方法示例
2018/01/10 Javascript
angularjs 获取默认选中的单选按钮的value方法
2018/02/28 Javascript
node实现登录图片验证码的示例代码
2018/04/20 Javascript
通过实例讲解JS如何防抖动
2019/06/15 Javascript
微信小程序全选多选效果实现代码解析
2020/01/21 Javascript
Vue中多元素过渡特效的解决方案
2020/02/05 Javascript
Python设计模式之工厂模式简单示例
2018/01/09 Python
Python OpenCV实现图片上输出中文
2018/01/22 Python
Python基础教程之利用期物处理并发
2018/03/29 Python
python如何爬取个性签名
2018/06/19 Python
python面试题之列表声明实例分析
2019/07/08 Python
linux面试题参考答案(4)
2013/01/28 面试题
标准导师推荐信(医学类)
2013/10/28 职场文书
教师的实习自我鉴定
2013/12/17 职场文书
党课培训心得体会
2014/09/02 职场文书
自习课吵闹检讨书范文
2014/09/26 职场文书
个人作风建设剖析材料
2014/10/11 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
关于React Native使用axios进行网络请求的方法
2021/08/02 Javascript