本實例是為了實現在管理後台實現微信菜單的添加刪除管理。
1、首先我們需要新建一個數據庫表用於存放menu菜單項
可包含的字段有id、父類id、name、排序、是否顯示、類型(view、click)、鏈接、adddate
注意後台存menu菜單數據時,parentId=-1為一級菜單,或parendId為一級菜單的id作為該一級菜單下的二級菜單
2、在設置菜單時需要向微信接口傳menuJson字符串,所以要先拼接字符串,後台定義一個creatMenu()
public bool creatMenu() { string menuJson = ""; //這裡默認parentId=-1為最外層菜單,isactive=1為顯示,responseType=1為click類型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字符串後調用微信接口創建菜單,需先獲取assess token,有關assess token獲取可參考:獲取AccessToken
/// <summary> /// 向微信服務器請求創建自定義菜單/// </summary> /// <param name="jsonStr"></param> /// <returns></returns> /// private bool requstZmToCreatMent(string jsonStr) { try { var AccessToken = "";//accesstoken需例外獲取,一般可開始時獲取後存數據庫,下次從數據庫取,注意accesstoken有效期為7200秒//聲明一個HttpWebRequest請求string interfaceUrl = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + AccessToken; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(interfaceUrl); //設置連接超時時間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; //發送數據using (Stream writer = request.GetRequestStream()) { writer.Write(Bytes, 0, Bytes.Length); writer.Close(); } StringBuilder strb = new StringBuilder(); //接收數據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錯誤{ // AccessToken = getAccessToken(); getzmAccessToken(); return requstZmToCreatMent(jsonStr); } else { if (strb.ToString() == "{/"errcode/":0,/"errmsg/":/"ok/"}") { return true; } else { return false; } } } catch (Exception exp) { return false; } }總結
以上所述是小編給大家介紹的微信公眾號開發之設置自定義菜單實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!