Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 ///// <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);
 }
Exemplo n.º 3
0
 public GetMenuResult()
 {
     menu = new ButtonGroup();
 }
Exemplo n.º 4
0
        /// <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;
        }