.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 相关文章推荐
List Installed Software Features
Jun 11 Javascript
jQuery 性能优化指南(3)
May 21 Javascript
JQuery UI DatePicker中z-index默认为1的解决办法
Sep 28 Javascript
jQuery Ajax调用WCF服务详细教程
Mar 31 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
May 25 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
Jul 04 Javascript
AngularJS中transclude用法详解
Nov 03 Javascript
详解JavaScript按概率随机生成事件
Aug 02 Javascript
vue计算属性computed的使用方法示例
Mar 13 Javascript
javascript实现多边形碰撞检测
Oct 24 Javascript
浅谈Vue static 静态资源路径 和 style问题
Nov 07 Javascript
vue中利用three.js实现全景图的完整示例
Dec 07 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
PHP中创建空文件的代码[file_put_contents vs touch]
2012/01/20 PHP
使用PHP静态变量当缓存的方法
2013/11/13 PHP
windows平台中配置nginx+php环境
2015/12/06 PHP
Zend Framework动作助手Url用法详解
2016/03/05 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
2016/10/13 PHP
PHP中PCRE正则解析代码详解
2019/04/26 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
ExtJS TabPanel beforeremove beforeclose使用说明
2010/03/31 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
2013/09/13 Javascript
SeaJS入门教程系列之完整示例(三)
2014/03/03 Javascript
Jquery实现textarea根据文本内容自适应高度
2015/04/03 Javascript
原生JavaScript制作微博发布面板效果
2016/03/11 Javascript
基于jQuery实现表格的排序
2016/12/02 Javascript
JS排序之快速排序详解
2017/04/08 Javascript
关于foreach循环中遇到的问题小结
2017/05/08 Javascript
解决Vue 通过下表修改数组,页面不渲染的问题
2018/03/08 Javascript
图解javascript作用域链
2019/05/27 Javascript
微信小程序npm引入vant-weapp的踩坑记录
2019/08/01 Javascript
[06:57]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD 选手采访
2021/03/11 DOTA
python聊天程序实例代码分享
2013/11/18 Python
python与C互相调用的方法详解
2017/07/14 Python
pycharm修改界面主题颜色的方法
2019/01/17 Python
keras实现VGG16方式(预测一张图片)
2020/07/07 Python
投标邀请书范文
2014/01/31 职场文书
校园安全检查制度
2014/02/03 职场文书
文明寝室标语
2014/06/13 职场文书
银行授权委托书样本
2014/10/13 职场文书
中国世界遗产导游词
2015/02/13 职场文书
开天辟地观后感
2015/06/09 职场文书
工资证明范本
2015/06/12 职场文书
2015年计算机教学工作总结
2015/07/22 职场文书
二胎满月酒致辞
2015/07/29 职场文书
公司车辆管理制度
2015/08/04 职场文书
2016简单的租房合同范本
2016/03/18 职场文书
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL
OpenFeign实现远程调用
2022/08/14 Java/Android