.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右键菜单效果代码
Jul 21 Javascript
25个好玩的JavaScript小游戏分享
Apr 22 Javascript
DWZ table的原生分页浅谈
Mar 01 Javascript
javascript full screen 全屏显示页面元素的方法
Sep 27 Javascript
jquery简单倒计时实现方法
Dec 18 Javascript
vuejs实现本地数据的筛选分页功能思路详解
Nov 15 Javascript
详解Vue2 添加对scss的支持
Jan 02 Javascript
浅谈JavaScript面向对象--继承
Mar 20 Javascript
Layui实现数据表格默认全部显示(不要分页)
Oct 26 Javascript
vue.config.js常用配置详解
Nov 14 Javascript
前端开发基础javaScript的六大作用
Aug 06 Javascript
Vue实现图书管理小案例
Dec 03 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
建立动态的WML站点(二)
2006/10/09 PHP
PHP脚本数据库功能详解(中)
2006/10/09 PHP
php 全文搜索和替换的实现代码
2008/07/29 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
PHP Trait功能与用法实例分析
2020/06/03 PHP
破除一些网站复制、右键限制
2006/11/04 Javascript
Javascript与vbscript数据共享
2007/01/09 Javascript
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
js的回调函数详解
2015/01/05 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
Bootstrap和Java分页实例第一篇
2016/12/23 Javascript
react.js组件实现拖拽复制和可排序的示例代码
2018/08/20 Javascript
如何在 JavaScript 中更好地利用数组
2018/09/27 Javascript
js 将多个对象合并成一个对象 assign方法的实现
2020/09/24 Javascript
[02:15]你好,这就是DOTA!
2015/08/05 DOTA
[06:15]2016国际邀请赛中国区预选赛单车采访:我顶WINGS
2016/06/27 DOTA
[39:02]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs VGJ.T
2018/04/01 DOTA
python中的内置函数getattr()介绍及示例
2014/07/20 Python
将图片文件嵌入到wxpython代码中的实现方法
2014/08/11 Python
Python中对列表排序实例
2015/01/04 Python
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
利用Python将每日一句定时推送至微信的实现方法
2018/08/13 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
2019/04/29 Python
python使用sessions模拟登录淘宝的方式
2019/08/16 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
Python面向对象之多态原理与用法案例分析
2019/12/30 Python
django执行原始查询sql,并返回Dict字典例子
2020/04/01 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
2020/12/04 Python
CSS3中的opacity属性使用教程
2015/08/19 HTML / CSS
iRobot官网:改变生活的家用机器人品牌
2016/09/20 全球购物
兼职学生的自我评价
2013/11/24 职场文书
吸烟检讨书2000字
2014/02/13 职场文书
公安机关纪律作风整顿剖析
2014/10/10 职场文书
Vue项目中如何封装axios(统一管理http请求)
2021/05/02 Vue.js
HTML+CSS实现导航条下拉菜单的示例代码
2021/08/02 HTML / CSS