微信公眾號(hào)開(kāi)發(fā)之設(shè)置自定義菜單實(shí)例代碼【java版】
本實(shí)例是為了實(shí)現(xiàn)在管理后臺(tái)實(shí)現(xiàn)微信菜單的添加刪除管理。
1、首先我們需要新建一個(gè)數(shù)據(jù)庫(kù)表用于存放menu菜單項(xiàng)

可包含的字段有id、父類(lèi)id、name、排序、是否顯示、類(lèi)型(view、click)、鏈接、adddate
注意后臺(tái)存menu菜單數(shù)據(jù)時(shí),parentId=-1為一級(jí)菜單,或parendId為一級(jí)菜單的id作為該一級(jí)菜單下的二級(jí)菜單
2、在設(shè)置菜單時(shí)需要向微信接口傳menuJson字符串,所以要先拼接字符串,后臺(tái)定義一個(gè)creatMenu()
public bool creatMenu()
{
string menuJson = "";
//這里默認(rèn)parentId=-1為最外層菜單,isactive=1為顯示,responseType=1為click類(lèi)型
DataTable dtAMenu = Service.SelectDataTable("id, name, responseType, jsonStr,url", "WEIXINMENU", " parentId=-1 and isactive=1 order by sort");
if (dtAMenu.Rows.Count > 0)
{
menuJson = "{\"button\":[";
for (int i = 0; i < dtAMenu.Rows.Count; i++)
{
DataTable dtBMenu = Service.SelectDataTable("id, name, responseType, jsonStr,url", wx, " parentId=" + dtAMenu.Rows[i]["id"].ToString() + " and isactive=1 order by sort");
if (dtBMenu.Rows.Count > 0)
{
menuJson += "{\"name\":\"" + dtAMenu.Rows[i]["name"].ToString() + "\",\"sub_button\":[";
for (int j = 0; j < dtBMenu.Rows.Count; j++)
{
if (Convert.ToInt32(dtBMenu.Rows[j]["responseType"]) == 2)
{
menuJson += "{\"type\":\"view\",\"name\":\"" + dtBMenu.Rows[j]["name"].ToString() + "\",\"url\":\"" + dtBMenu.Rows[j]["jsonStr"].ToString() + "\"},";
}
else
{
menuJson += "{\"type\":\"click\",\"name\":\"" + dtBMenu.Rows[j]["name"].ToString() + "\",\"key\":\"eventKey_" + dtBMenu.Rows[j]["id"].ToString() + "\"},";
}
}
menuJson = menuJson.TrimEnd(',');
menuJson += "]},";
}
else
{
//if (Convert.ToInt32(dtAMenu.Rows[i]["responseType"]) == 2)
//{
menuJson += "{\"type\":\"view\",\"name\":\"" + dtAMenu.Rows[i]["name"].ToString() + "\",\"url\":\"" + dtAMenu.Rows[i]["jsonStr"].ToString() + "\"},";
//}
//else
//{
// menuJson += "{\"type\":\"click\",\"name\":\"" + dtAMenu.Rows[i]["name"].ToString() + "\",\"key\":\"eventKey_" + dtAMenu.Rows[i]["id"].ToString() + "\"},";
//}
}
dtBMenu.Dispose();
}
dtAMenu.Dispose();
menuJson = menuJson.TrimEnd(',');
menuJson += "]}";
menuJson = menuJson.Trim();
return requstZmToCreatMent(menuJson);
}
else
{
return false;
}
}
3、獲取到menujson字符串后調(diào)用微信接口創(chuàng)建菜單,需先獲取assess token,有關(guān)assess token獲取可參考:獲取AccessToken
/// <summary>
/// 向微信服務(wù)器請(qǐng)求創(chuàng)建自定義菜單
/// </summary>
/// <param name="jsonStr"></param>
/// <returns></returns>
///
private bool requstZmToCreatMent(string jsonStr)
{
try
{
var AccessToken = "";//accesstoken需例外獲取,一般可開(kāi)始時(shí)獲取后存數(shù)據(jù)庫(kù),下次從數(shù)據(jù)庫(kù)取,注意accesstoken有效期為7200秒
//聲明一個(gè)HttpWebRequest請(qǐng)求
string interfaceUrl = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + AccessToken;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(interfaceUrl);
//設(shè)置連接超時(shí)時(shí)間
request.Timeout = 30000;
request.KeepAlive = true;
Encoding encodeType = Encoding.GetEncoding("UTF-8");
request.Headers.Set("Pragma", "no-cache");
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; Maxthon; .NET CLR 1.1.4322); Http STdns";
request.Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
request.CookieContainer = new CookieContainer();
byte[] Bytes = encodeType.GetBytes(jsonStr);
request.ContentLength = Bytes.Length;
request.AllowAutoRedirect = true;
//發(fā)送數(shù)據(jù)
using (Stream writer = request.GetRequestStream())
{
writer.Write(Bytes, 0, Bytes.Length);
writer.Close();
}
StringBuilder strb = new StringBuilder();
//接收數(shù)據(jù)
using (Stream reader = request.GetResponse().GetResponseStream())
{
StreamReader sr = new StreamReader(reader, encodeType);
strb.Append(sr.ReadToEnd());
sr.Close();
reader.Close();
}
if ((strb.ToString().IndexOf("\"errcode\":42001") != -1) || (strb.ToString().IndexOf("\"errcode\":40001") != -1) || (strb.ToString().IndexOf("\"errcode\":40014") != -1) || (strb.ToString().IndexOf("\"errcode\":41001") != -1)) //access_token錯(cuò)誤
{
// AccessToken = getAccessToken();
getzmAccessToken();
return requstZmToCreatMent(jsonStr);
}
else
{
if (strb.ToString() == "{\"errcode\":0,\"errmsg\":\"ok\"}")
{
return true;
}
else
{
return false;
}
}
}
catch (Exception exp)
{
return false;
}
}
總結(jié)
以上所述是小編給大家介紹的微信公眾號(hào)開(kāi)發(fā)之設(shè)置自定義菜單實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- java使用jdbc連接數(shù)據(jù)庫(kù)簡(jiǎn)單實(shí)例
- java布局管理之CardLayout簡(jiǎn)單實(shí)例
- java GUI實(shí)現(xiàn)學(xué)生圖書(shū)管理簡(jiǎn)單實(shí)例
- Java注解處理器簡(jiǎn)單實(shí)例
- java 實(shí)現(xiàn)音樂(lè)播放器的簡(jiǎn)單實(shí)例
- Java實(shí)現(xiàn)跳躍表(skiplist)的簡(jiǎn)單實(shí)例
- java 實(shí)現(xiàn)MD5加密算法的簡(jiǎn)單實(shí)例
- Java程序單實(shí)例運(yùn)行的簡(jiǎn)單實(shí)現(xiàn)
相關(guān)文章
Java INPUTSTREAM如何實(shí)現(xiàn)重復(fù)使用
這篇文章主要介紹了Java INPUTSTREAM如何實(shí)現(xiàn)重復(fù)使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
MyBatis中example.createCriteria()方法的具體使用
本文詳細(xì)介紹了MyBatis的Example工具的使用方法,包括鏈?zhǔn)秸{(diào)用指定字段、設(shè)置查詢條件、支持多種查詢方式等,還介紹了mapper的crud方法、and/or方法的使用,以及如何進(jìn)行多條件和多重條件查詢,感興趣的可以了解一下2024-10-10
解決idea中maven項(xiàng)目打包成jar報(bào)錯(cuò):沒(méi)有主清單屬性的問(wèn)題
這篇文章主要給大家分享了idea中maven項(xiàng)目打包成jar,報(bào)錯(cuò)沒(méi)有主清單屬性解決方法,文中有詳細(xì)的解決方法,如果又遇到同樣問(wèn)題的朋友可以參考一下本文2023-09-09
沒(méi)有外網(wǎng)IDEA離線使用maven倉(cāng)庫(kù)的方法
這篇文章主要介紹了沒(méi)有外網(wǎng),IDEA如何離線使用maven倉(cāng)庫(kù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
Kafka中的producer攔截器與consumer攔截器詳解
這篇文章主要介紹了Kafka中的producer攔截器與consumer攔截器詳解,Producer 的Interceptor使得用戶在消息發(fā)送前以及Producer回調(diào)邏輯前有機(jī)會(huì)對(duì)消息做 一些定制化需求,比如修改消息等,需要的朋友可以參考下2023-12-12
Springboot解決ajax+自定義headers的跨域請(qǐng)求問(wèn)題
由于瀏覽器同源策略(同源策略,它是由Netscape提出的一個(gè)著名的安全策略,現(xiàn)在所有支持JavaScript 的瀏覽器都會(huì)使用這個(gè)策略。接下來(lái)通過(guò)本文給大家介紹Springboot如何優(yōu)雅的解決ajax+自定義headers的跨域請(qǐng)求 ,需要的朋友可以參考下2019-05-05
Javaweb mybatis接口開(kāi)發(fā)實(shí)現(xiàn)過(guò)程詳解
這篇文章主要介紹了Javaweb mybatis接口開(kāi)發(fā)實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07

