1、配置文件中,配置好微信自定义菜单开发需要的AppID和AppSecret:
<?xml version="1.0"?> <configuration> <appSettings> <add key="AppID" value="appid的值"/> <add key="AppSecret" value="appsecret的值"/> </appSettings> <connectionStrings /> <system.web> <compilation debug="true"> </compilation> <!-- 通过 <authentication> 节可以配置 安全身份验证模式,ASP.NET 使用该模式来识别来访用户身份。 --> <authentication mode="Windows" /> <!-- 如果在执行请求的过程中出现未处理的错误, 则通过 <customErrors> 节 可以配置相应的处理步骤。具体而言, 开发人员通过该节可配置要显示的 html 错误页, 以代替错误堆栈跟踪。 <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm"> <error statusCode="403" redirect="NoAccess.htm" /> <error statusCode="404" redirect="FileNotFound.htm" /> </customErrors> --> </system.web> </configuration>
2、添加自定义菜单源代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
string getStr = GetModel("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + ConfigurationManager.AppSettings["AppID"] + "&secret=" + ConfigurationManager.AppSettings["AppSecret"]); //授权、返回access_token
JObject Sobject = JObject.Parse(getStr);
string ACCESS_TOKEN = ((JValue)Sobject["access_token"]).Value.ToString().Trim();
string postStr =
"{\"button\":[{\"name\":\"工作与学习\",\"sub_button\":[" +
"{\"type\":\"view\",\"name\":\"工作之路\",\"url\":\"https://www.zhengdecai.com/?mod=pad&cate=1\"}," +
"{\"type\":\"view\",\"name\":\"学习之路\",\"url\":\"https://www.zhengdecai.com/?mod=pad&cate=2\"}" +
"]}," +
"{\"name\":\"网络文章\",\"sub_button\":[" +
"{\"type\":\"view\",\"name\":\"感悟之章\",\"url\":\"https://www.zhengdecai.com/?mod=pad&cate=3\"}," +
"{\"type\":\"view\",\"name\":\"博文调用\",\"url\":\"https://www.zhengdecai.com/?mod=pad&cate=4\"}," +
"{\"type\":\"view\",\"name\":\"网络文摘\",\"url\":\"https://www.zhengdecai.com/?mod=pad&cate=6\"}," +
"{\"type\":\"view\",\"name\":\"知道理解\",\"url\":\"https://www.zhengdecai.com/?mod=pad&cate=7\"}" +
"]}," +
"{\"name\":\"其他\",\"sub_button\":[" +
"{\"type\":\"view\",\"name\":\"项目源码\",\"url\":\"https://www.zhengdecai.com/?mod=pad&cate=8\"}," +
"{\"type\":\"view\",\"name\":\"爱上旅行\",\"url\":\"https://www.zhengdecai.com/?mod=pad&cate=10\"}," +
"{\"type\":\"view\",\"name\":\"开心一刻\",\"url\":\"https://www.zhengdecai.com/?mod=pad&cate=5\"}]}]}";
string postUrlStr = GetHtmlFromPost("https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + ACCESS_TOKEN, Encoding.UTF8, postStr);
JObject Sobject1 = JObject.Parse(postUrlStr);
string ACCESS_TOKEN1 = ((JValue)Sobject1["errmsg"]).Value.ToString().Trim();
if (ACCESS_TOKEN1 == "ok")
{
Response.Write("添加成功!");
}
else
{
Response.Write("添加失败!失败问题:" + ACCESS_TOKEN1);
}
}
}
/// <summary>
/// get方式读取数据
/// </summary>
/// <param name="strUrl">地址</param>
/// <returns>返回数据</returns>
private string GetModel(string strUrl)
{
string strRet = null;
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strUrl);
request.Timeout = 2000;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
System.IO.Stream resStream = response.GetResponseStream();
Encoding encode = System.Text.Encoding.UTF8;
StreamReader readStream = new StreamReader(resStream, encode);
Char[] read = new Char[256];
int count = readStream.Read(read, 0, 256);
while (count > 0)
{
String str = new String(read, 0, count);
strRet = strRet + str;
count = readStream.Read(read, 0, 256);
}
resStream.Close();
}
catch (Exception e)
{
strRet = "";
}
return strRet;
}
/// <summary>
/// 提供通过POST方法获取页面的方法
/// </summary>
/// <param name="urlString">请求的URL</param>
/// <param name="encoding">页面使用的编码</param>
/// <param name="postDataString">POST数据</param>
/// <returns>获取的页面</returns>
public static string GetHtmlFromPost(string urlString, Encoding encoding, string postDataString)
{
//定义局部变量
CookieContainer cookieContainer = new CookieContainer();
HttpWebRequest httpWebRequest = null;
HttpWebResponse httpWebResponse = null;
Stream inputStream = null;
Stream outputStream = null;
StreamReader streamReader = null;
string htmlString = string.Empty;
//转换POST数据
byte[] postDataByte = encoding.GetBytes(postDataString);
//建立页面请求
try
{
httpWebRequest = WebRequest.Create(urlString) as HttpWebRequest;
}
//处理异常
catch (Exception ex)
{
throw new Exception("建立页面请求时发生错误!", ex);
}
//指定请求处理方式
httpWebRequest.Method = "POST";
httpWebRequest.KeepAlive = false;
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.CookieContainer = cookieContainer;
httpWebRequest.ContentLength = postDataByte.Length;
//向服务器传送数据
try
{
inputStream = httpWebRequest.GetRequestStream();
inputStream.Write(postDataByte, 0, postDataByte.Length);
}
//处理异常
catch (Exception ex)
{
throw new Exception("发送POST数据时发生错误!", ex);
}
finally
{
inputStream.Close();
}
//接受服务器返回信息
try
{
httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse;
outputStream = httpWebResponse.GetResponseStream();
streamReader = new StreamReader(outputStream, encoding);
htmlString = streamReader.ReadToEnd();
}
//处理异常
catch (Exception ex)
{
throw new Exception("接受服务器返回页面时发生错误!", ex);
}
finally
{
streamReader.Close();
}
foreach (Cookie cookie in httpWebResponse.Cookies)
{
cookieContainer.Add(cookie);
}
return htmlString;
}3、删除所有自定义菜单源代码:
protected void Page_Load(object sender, EventArgs e)
{
string getStr = GetModel("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + ConfigurationManager.AppSettings["AppID"] + "&secret=" + ConfigurationManager.AppSettings["AppSecret"]);
JObject Sobject = JObject.Parse(getStr);
string ACCESS_TOKEN = ((JValue)Sobject["access_token"]).Value.ToString().Trim();
string postUrlStr = GetModel("https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=" + ACCESS_TOKEN);
JObject Sobject1 = JObject.Parse(postUrlStr);
string ACCESS_TOKEN1 = ((JValue)Sobject1["errmsg"]).Value.ToString().Trim();
if (ACCESS_TOKEN1 == "ok")
{
Response.Write("删除成功!");
}
else
{
Response.Write("删除失败!失败问题:" + ACCESS_TOKEN1);
}
}4、读取已经设置过的自定义菜单信息源代码:
protected void Page_Load(object sender, EventArgs e)
{
string getStr = GetModel("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + ConfigurationManager.AppSettings["AppID"] + "&secret=" + ConfigurationManager.AppSettings["AppSecret"]);
JObject Sobject = JObject.Parse(getStr);
string ACCESS_TOKEN = ((JValue)Sobject["access_token"]).Value.ToString().Trim();
string postUrlStr = GetModel("https://api.weixin.qq.com/cgi-bin/menu/get?access_token=" + ACCESS_TOKEN);
Response.Write(JsonConvert.DeserializeObject(postUrlStr.ToString())); //格式化成JSON数据输出
}通过这些操作,可以管理自己的微信自定义菜单。
效果图:

发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。