.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 相关文章推荐
jquery 多行滚动代码(附详细解释)
Jun 17 Javascript
javascript中判断json的方法总结
Aug 27 Javascript
JavaScript构造函数详解
Dec 27 Javascript
基于jquery实现即时检查格式是否正确的表单
May 06 Javascript
KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定
Oct 11 Javascript
js字符限制(字符截取) 一个中文汉字算两个字符
Sep 12 Javascript
Vuejs 单文件组件实例详解
Feb 09 Javascript
详解Vue webapp项目通过HBulider打包原生APP
Jun 29 Javascript
jQuery+ThinkPHP实现图片上传
Jul 23 jQuery
微信小程序实现分页加载效果
Nov 19 Javascript
vue实现登陆页面开发实践
May 30 Vue.js
浅析JavaScript中的变量提升
Jun 01 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
在 Laravel 中 “规范” 的开发短信验证码发送功能
2017/10/26 PHP
CI框架(CodeIgniter)实现的导入、导出数据操作示例
2018/05/24 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
2019/09/04 PHP
javascript 动态添加表格行
2006/06/22 Javascript
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
2013/08/21 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
JS动态改变表格边框宽度的方法
2015/03/31 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
2015/09/15 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
Jquery attr()方法 属性赋值和属性获取详解
2016/04/15 Javascript
Bootstrap select多选下拉框实现代码
2016/12/23 Javascript
Angular.js中angular-ui-router的简单实践
2017/07/18 Javascript
vue中使用echarts制作圆环图的实例代码
2018/07/27 Javascript
让axios发送表单请求形式的键值对post数据的实例
2018/08/11 Javascript
vue-router两种模式区别及使用注意事项详解
2019/08/01 Javascript
使用Vue实现调用接口加载页面初始数据
2019/10/28 Javascript
解决小程序无法触发SESSION问题
2020/02/03 Javascript
[01:17:12]职来职往完美电竞专场
2014/09/18 DOTA
[06:33]DOTA2亚洲邀请赛小组赛第二日 TOP10精彩集锦
2015/01/31 DOTA
Python 文件操作技巧(File operation) 实例代码分析
2008/08/11 Python
Python中的pprint折腾记
2015/01/21 Python
python实现将英文单词表示的数字转换成阿拉伯数字的方法
2015/07/02 Python
Python实现上下班抢个顺风单脚本
2018/02/07 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
对python添加模块路径的三种方法总结
2018/10/16 Python
Python3 JSON编码解码方法详解
2019/09/06 Python
安装python及pycharm的教程图解
2019/10/10 Python
python pymysql库的常用操作
2020/10/16 Python
拉飞逸官网:Lafayette 148 New York
2020/07/15 全球购物
联谊活动策划书
2014/01/26 职场文书
《我不是最弱小的》教学反思
2014/02/23 职场文书
安全生产承诺书
2014/03/26 职场文书
员工辞退通知书
2015/04/17 职场文书
签字仪式主持词
2015/07/03 职场文书
面试分析分布式架构Redis热点key大Value解决方案
2022/03/13 Redis