.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 getBoundingClientRect() 来获取页面元素的位置
Nov 25 Javascript
基于mootools 1.3框架下的图片滑动效果代码
Apr 22 Javascript
js正则表达exec与match的区别说明
Jan 29 Javascript
JavaScript中的单引号和双引号报错的解决方法
Sep 01 Javascript
window.open()实现post传递参数
Mar 12 Javascript
JavaScript中Number.NEGATIVE_INFINITY值的使用详解
Jun 05 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
Jun 17 Javascript
jQuery Tree Multiselect使用详解
May 02 jQuery
node跨域请求方法小结
Aug 25 Javascript
在Vue.js中使用Mixins的方法
Sep 12 Javascript
js实现移动端轮播图
Dec 21 Javascript
JavaScript中window和document用法详解
Jul 28 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+mysql+ajax轻量级聊天室实现方法详解
2016/10/17 PHP
AeroWindow 基于JQuery的弹出窗口插件
2011/06/27 Javascript
javascript中的作用域和上下文使用简要概述
2013/12/05 Javascript
js 获取、清空input type="file"的值示例代码
2014/02/19 Javascript
Node.js开发之访问Redis数据库教程
2015/01/14 Javascript
浅谈jquery事件处理
2015/04/24 Javascript
轻量级的原生js日历插件calendar.js使用指南
2015/04/28 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
2016/12/08 Javascript
vue.js element-ui tree树形控件改iview的方法
2018/03/29 Javascript
vue 左滑删除功能的示例代码
2019/01/28 Javascript
浅谈小程序 setData学问多
2019/02/20 Javascript
vue实现鼠标移入移出事件代码实例
2019/03/27 Javascript
jQuery 选择器用法基础入门示例
2020/01/04 jQuery
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
[10:34]DOTA2上海特级锦标赛全纪录
2016/03/25 DOTA
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
2018/01/09 Python
Python使用正则表达式获取网页中所需要的信息
2018/01/29 Python
python 定时修改数据库的示例代码
2018/04/08 Python
Python爬取数据并写入MySQL数据库的实例
2018/06/21 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
2019/07/06 Python
Python try except异常捕获机制原理解析
2020/04/18 Python
flask项目集成swagger的方法
2020/12/09 Python
美国著名的户外用品品牌:L.L.Bean
2018/01/05 全球购物
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
大学生活学习的自我评价
2013/12/03 职场文书
经典安踏广告词
2014/03/21 职场文书
《吃水不忘挖井人》教学反思
2014/04/15 职场文书
社保委托书怎么写
2014/08/02 职场文书
毕业生代领毕业材料的授权委托书
2014/09/29 职场文书
代领学位证书毕业证书委托书
2014/09/30 职场文书
2015年企业工作总结范文
2015/04/28 职场文书
2016计划生育先进个人事迹材料
2016/02/29 职场文书
《天使的翅膀》读后感3篇
2019/12/20 职场文书
ORACLE数据库对long类型字段进行模糊匹配的解决思路
2021/04/07 Oracle
SpringDataJPA在Entity中常用的注解介绍
2021/12/06 Java/Android
python中对列表的删除和添加方法详解
2022/02/24 Python