一.前言
开发之前,我们需要阅读官方的接口说明文档,不得不吐槽一下,微信的这个官方文档真的很烂,但是,为了开发我们需要的功能,我们也不得不去看这些文档.
接口文档地址: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"
:
"付停车费"
,
},{
"name"
:
"个人中心"
,
"sub_button"
:[
{
"type"
:
"view"
,
"name"
:
"个人信息"
,
},
{
"type"
:
"view"
,
"name"
:
"订单查询"
,
},
{
"type"
:
"view"
,
"name"
:
"使用帮助"
,
},
{
"type"
:
"view"
,
"name"
:
"下载APP"
,
}]
}]
}
|
三.开始编码
首先我们创建一个一般处理程序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;
instream = response.GetResponseStream();
sr =
new
StreamReader(instream, encoding);
string
content = sr.ReadToEnd();
string
err =
string
.Empty;
Response.Write(content);
return
content;
}
catch
(Exception ex)
{
string
err = ex.Message;
return
string
.Empty;
}
}
|
public
static
string Menu()
{
string Content =
""
;
Content +=
"欢迎使用/微笑\n\n"
;
Content +=
"输入以下序号开始获取最新信息:\n"
;
Content +=
"1,企业快报\ue102\n"
;
Content +=
"2,行业要览\n"
;
Content +=
"3,行情动态\n"
;
Content +=
"4,焦点访谈\n"
;
Content +=
"5,下游资讯\n"
;
Content +=
"6,资讯中心\ue135\n"
;
Content +=
"7,采购\ue42f\n"
;
Content +=
"8,市场报告--VIP\ue035专属\n\n"
;
Content +=
"输入其他关键字可以搜索\ue114\n"
;
Content +=
"输入序号@关键字可以在指定类别下搜索,比如 1@马航\n"
;
Content +=
"输入?或帮助 可以显示此菜单"
;
return
Content;
}
http://www.jb51.net/article/69540.htm