.NET微信公众号开发之创建自定义菜单

一.前言

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

接口文档地址:http://mp.weixin.qq.com/wiki/13/43de8269be54a0a6f64413e4dfa94f39.html

看了这些个文档,基本意思明白了,就是我们把我们要创建的菜单创建好,post到微信的服务器上面,微信服务器然后给我们一些状态码,从而判断我们的菜单是否创建成功,只是在发送json数据以前我们要做一些身份验证。

二.准备工作

首先把我们要创建的菜单写在一个txt文本中:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
{
   "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

    代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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;
   }
}

http://www.jb51.net/article/69540.htm

你可能感兴趣的:(.NET微信公众号开发之创建自定义菜单)