.NET微信公众号开发之创建自定义菜单
一.前言
开发之前,我们需要阅读官方的接口说明文档,不得不吐槽一下,微信的这个官方文档真的很烂,但是,为了开发我们需要的功能,我们也不得不去看这些文档.
接口文档地址: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.
publicstring access_token{get;set;}
protectedvoidPage_Load(objectsender,EventArgse)
{
FileStreamfs1=newFileStream(Server.MapPath(".")+"\\menu.txt",FileMode.Open);
StreamReadersr=newStreamReader(fs1,Encoding.GetEncoding("UTF-8"));
stringmenu=sr.ReadToEnd();
sr.Close();
fs1.Close();
varstr=GetPage("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wxd811f5114e3e56f3&secret=76eb33f66129692da16d148cb3c024f1","");
JObjectjo=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
代码如下:
publicstringGetPage(stringposturl,stringpostData)
{
Streamoutstream=null;
Streaminstream=null;
StreamReadersr=null;
HttpWebResponseresponse=null;
HttpWebRequestrequest=null;
Encodingencoding=Encoding.UTF8;
byte[]data=encoding.GetBytes(postData);
//准备请求...
try
{
//设置参数
request=WebRequest.Create(posturl)asHttpWebRequest;
CookieContainercookieContainer=newCookieContainer();
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()asHttpWebResponse;
//直到request.GetResponse()程序才开始向目标网页发送Post请求
instream=response.GetResponseStream();
sr=newStreamReader(instream,encoding);
//返回结果网页(html)代码
stringcontent=sr.ReadToEnd();
stringerr=string.Empty;
Response.Write(content);
returncontent;
}
catch(Exceptionex)
{
stringerr=ex.Message;
returnstring.Empty;
}
}
以上所述就是本文的全部内容了,希望大家能够喜欢