zoukankan      html  css  js  c++  java
  • .NET微信公众号开发-2.0创建自定义菜单

    一.前言

    开发之前,我们需要阅读官方的接口说明文档,不得不吐槽一下,微信的这个官方文档真的很烂,但是,为了开发我们需要的功能,我们也不得不去看这些文档.

    接口文档地址: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;
                }
            }

    五.微信公众号开发系列

    1.0初始微信公众号

    2.0创建自定义菜单

    3.0查询自定义菜单

    4.0公众号消息处理

    5.0微信支付

    6.0模板消息

  • 相关阅读:
    【C#食谱】【风味小吃】菜单2:角度转换为弧度
    16 Rules for Managers
    word打不开,要在安全模式下才能打开
    禁止修改IP地址工具及原理
    VB编程读取本地计算机IP地址及MAC地址
    联想TinkCenter 8000T 安装XP需要修改CMOS
    使用nLite封装2003集成Raid卡驱动
    怎么样让台式机通过笔记本无线上网 台式机共享上网 笔记本当无线路由器 两台电脑一根网线
    VB使用ADODB操作数据库的常用方法
    转:[震惊] 这两天发现被穿的真正原因——QQ电脑管家
  • 原文地址:https://www.cnblogs.com/fenglingyi/p/4647717.html
Copyright © 2011-2022 走看看