public void CreateMenuTest() { return;//已经通过测试 var accessToken = AccessTokenContainer.GetToken(_appId); ButtonGroup bg = new ButtonGroup(); //单击 bg.button.Add(new SingleClickButton() { name = "单击测试", key = "OneClick", type = ButtonType.click.ToString(),//默认已经设为此类型,这里只作为演示 }); //二级菜单 var subButton = new SubButton() { name = "二级菜单" }; subButton.sub_button.Add(new SingleClickButton() { key = "SubClickRoot_Text", name = "返回文本" }); subButton.sub_button.Add(new SingleClickButton() { key = "SubClickRoot_News", name = "返回图文" }); subButton.sub_button.Add(new SingleClickButton() { key = "SubClickRoot_Music", name = "返回音乐" }); subButton.sub_button.Add(new SingleViewButton() { url = "http://weixin.senparc.com", name = "Url跳转" }); bg.button.Add(subButton); var result = CommonApi.CreateMenu(accessToken, bg); Assert.IsNotNull(result); Assert.AreEqual("ok", result.errmsg); }
///// <summary> ///// 特殊符号转义 ///// </summary> ///// <param name="name"></param> ///// <returns></returns> //private static string ButtonNameEncode(string name) //{ // //直接用UrlEncode不行,显示内容超长 // return name.Replace("&", "%26"); //} /// <summary> /// 创建菜单 /// </summary> /// <param name="accessToken"></param> /// <param name="buttonData">菜单内容</param> /// <returns></returns> public static WXJsonResult CreateMenu(string accessToken, ButtonGroup buttonData) { var urlFormat = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token={0}"; ////对特殊符号进行URL转义 //foreach (var button in buttonData.button) //{ // button.name = ButtonNameEncode(button.name);//button.name.UrlEncode(); // if (button is SubButton) // { // var subButtonList = button as SubButton; // foreach (var subButton in subButtonList.sub_button) // { // subButton.name = ButtonNameEncode(button.name);//button.name.UrlEncode(); // } // } //} return CommonJsonSend.Send(accessToken, urlFormat, buttonData); }
public GetMenuResult() { menu = new ButtonGroup(); }
/// <summary> /// 根据微信返回的Json数据得到可用的GetMenuResult结果 /// </summary> /// <param name="resultFull"></param> /// <returns></returns> public static GetMenuResult GetMenuFromJsonResult(GetMenuResultFull resultFull) { GetMenuResult result = null; try { //重新整理按钮信息 ButtonGroup bg = new ButtonGroup(); foreach (var rootButton in resultFull.menu.button) { if (rootButton.name == null) { continue;//没有设置一级菜单 } var availableSubButton = rootButton.sub_button.Count(z => !string.IsNullOrEmpty(z.name));//可用二级菜单按钮数量 if (availableSubButton == 0) { //底部单击按钮 if (rootButton.type == null || (rootButton.type.Equals("CLICK", StringComparison.OrdinalIgnoreCase) && string.IsNullOrEmpty(rootButton.key))) { throw new WXMenuException("单击按钮的key不能为空!"); } if (rootButton.type.Equals("CLICK", StringComparison.OrdinalIgnoreCase)) { //点击 bg.button.Add(new SingleClickButton() { name = rootButton.name, key = rootButton.key, type = rootButton.type }); } else { //URL bg.button.Add(new SingleViewButton() { name = rootButton.name, url = rootButton.url, type = rootButton.type }); } } else if (availableSubButton < 2) { throw new WXMenuException("子菜单至少需要填写2个!"); } else { //底部二级菜单 var subButton = new SubButton(rootButton.name); bg.button.Add(subButton); foreach (var subSubButton in rootButton.sub_button) { if (subSubButton.name == null) { continue; //没有设置菜单 } if (subSubButton.type.Equals("CLICK", StringComparison.OrdinalIgnoreCase) && string.IsNullOrEmpty(subSubButton.key)) { throw new WXMenuException("单击按钮的key不能为空!"); } if (subSubButton.type.Equals("CLICK", StringComparison.OrdinalIgnoreCase)) { //点击 subButton.sub_button.Add(new SingleClickButton() { name = subSubButton.name, key = subSubButton.key, type = subSubButton.type }); } else { //URL subButton.sub_button.Add(new SingleViewButton() { name = subSubButton.name, url = subSubButton.url, type = subSubButton.type }); } } } } if (bg.button.Count < 2) { throw new WXMenuException("一级菜单按钮至少为2个!"); } result = new GetMenuResult() { menu = bg }; } catch (Exception ex) { throw new WXMenuException(ex.Message, ex); } return result; }