Beispiel #1
0
        public static void CreateMenuNode(int pi, MenuFull_RootButton button)
        {
            MenuFull_ButtonGroup menu = GetButtonGroup();

            if (pi == -1)
            {
                if (menu.button.Count == 3)
                {
                    throw new Exception("菜单(一级)超出最大数量3个!");
                }
                menu.button.Add(button);
            }
            else
            {
                var list = menu.button[pi].sub_button;
                if (list == null)
                {
                    list = new List <MenuFull_RootButton>();
                }


                if (menu.button.Count == 5)
                {
                    throw new Exception("菜单(二级)超出最大数量5个!");
                }

                list.Add(button);
                menu.button[pi].sub_button = list;
            }

            ReflushSetting(menu);
        }
Beispiel #2
0
        internal static MenuFull_RootButton GetMenuNode(int pi, int si)
        {
            MenuFull_ButtonGroup menu   = GetButtonGroup();
            MenuFull_RootButton  parent = menu.button[pi];

            if (si == -1)
            {
                return(parent);
            }
            return(parent.sub_button[si]);
        }
Beispiel #3
0
        public string CreateMenu_post(HttpContext context)
        {
            int pi = int.Parse(context.Request["pi"]);
            MenuFull_RootButton button = new MenuFull_RootButton();

            button.name = context.Request["name"];
            button.type = context.Request["type"];
            button.key  = context.Request["key"];
            button.url  = context.Request["url"];
            WeixinHelper.CreateMenuNode(pi, button);
            return("{result:true,message:'修改成功'}");
        }
Beispiel #4
0
        internal static void SaveMenuNode(int pi, int si, MenuFull_RootButton button)
        {
            MenuFull_ButtonGroup menu = GetButtonGroup();

            if (si == -1)
            {
                menu.button[pi] = button;
            }
            else
            {
                menu.button[pi].sub_button[si] = button;
            }

            ReflushSetting(menu);
        }
Beispiel #5
0
        public async Task PushMenuAsync(string accessTokenOrAppId, int siteId)
        {
            var resultFull = new GetMenuResultFull
            {
                menu = new MenuFull_ButtonGroup
                {
                    button = new List <MenuFull_RootButton>()
                }
            };

            var openMenus = await _wxMenuRepository.GetMenusAsync(siteId);

            foreach (var firstMenu in openMenus.Where(x => x.ParentId == 0))
            {
                var root = new MenuFull_RootButton
                {
                    name       = firstMenu.Text,
                    type       = firstMenu.MenuType.GetValue(),
                    url        = firstMenu.Url,
                    key        = firstMenu.Key,
                    sub_button = new List <MenuFull_RootButton>()
                };
                foreach (var child in openMenus.Where(x => x.ParentId == firstMenu.Id))
                {
                    root.sub_button.Add(new MenuFull_RootButton
                    {
                        name = child.Text,
                        type = child.MenuType.GetValue(),
                        url  = child.Url,
                        key  = child.Key
                    });
                }

                resultFull.menu.button.Add(root);
            }

            var buttonGroup = CommonApi.GetMenuFromJsonResult(resultFull, new ButtonGroup()).menu;
            var result      = CommonApi.CreateMenu(accessTokenOrAppId, buttonGroup);

            if (result.errmsg != "ok")
            {
                throw new Exception(result.errmsg);
            }
        }
Beispiel #6
0
        public void Sync_OnClick(object sender, EventArgs e)
        {
            if (Page.IsPostBack && Page.IsValid)
            {
                try
                {
                    var isSync       = false;
                    var errorMessage = string.Empty;

                    var accountInfo = WeiXinManager.GetAccountInfo(PublishmentSystemID);

                    if (WeiXinManager.IsBinding(accountInfo))
                    {
                        var resultFull = new GetMenuResultFull();
                        resultFull.menu        = new MenuFull_ButtonGroup();
                        resultFull.menu.button = new List <MenuFull_RootButton>();

                        var publishmentSystemUrl = PageUtils.AddProtocolToUrl(PageUtility.GetPublishmentSystemUrl(PublishmentSystemInfo, string.Empty));

                        var menuInfoList = DataProviderWX.MenuDAO.GetMenuInfoList(PublishmentSystemID, 0);
                        foreach (var menuInfo in menuInfoList)
                        {
                            var rootButton = new MenuFull_RootButton();
                            rootButton.name = menuInfo.MenuName;

                            rootButton.sub_button = new List <MenuFull_RootButton>();
                            var subMenuInfoList = DataProviderWX.MenuDAO.GetMenuInfoList(PublishmentSystemID, menuInfo.MenuID);

                            if (subMenuInfoList.Count > 0)
                            {
                                foreach (var subMenuInfo in subMenuInfoList)
                                {
                                    var subButton = new MenuFull_RootButton();

                                    var isExists = false;

                                    subButton.name = subMenuInfo.MenuName;
                                    if (subMenuInfo.MenuType == EMenuType.Site)
                                    {
                                        var pageUrl = string.Empty;
                                        if (subMenuInfo.ContentID > 0)
                                        {
                                            var tableStyle = NodeManager.GetTableStyle(PublishmentSystemInfo, subMenuInfo.ChannelID);
                                            var tableName  = NodeManager.GetTableName(PublishmentSystemInfo, subMenuInfo.ChannelID);

                                            var contentInfo = DataProvider.ContentDAO.GetContentInfoNotTrash(tableStyle, tableName, subMenuInfo.ContentID);
                                            if (contentInfo != null)
                                            {
                                                pageUrl = PageUtility.GetContentUrl(PublishmentSystemInfo, contentInfo, true);
                                            }
                                        }
                                        else
                                        {
                                            var nodeInfo = NodeManager.GetNodeInfo(PublishmentSystemID, subMenuInfo.ChannelID);
                                            if (nodeInfo != null)
                                            {
                                                pageUrl = PageUtility.GetChannelUrl(PublishmentSystemInfo, nodeInfo);
                                            }
                                        }

                                        if (!string.IsNullOrEmpty(pageUrl))
                                        {
                                            isExists       = true;
                                            subButton.type = "view";
                                            subButton.url  = PageUtils.AddProtocolToUrl(pageUrl);
                                        }
                                    }
                                    else if (subMenuInfo.MenuType == EMenuType.Keyword)
                                    {
                                        if (KeywordManager.IsExists(PublishmentSystemID, subMenuInfo.Keyword))
                                        {
                                            isExists       = true;
                                            subButton.type = "click";
                                            subButton.key  = subMenuInfo.Keyword;
                                        }
                                    }
                                    else if (subMenuInfo.MenuType == EMenuType.Url)
                                    {
                                        if (!string.IsNullOrEmpty(subMenuInfo.Url))
                                        {
                                            isExists       = true;
                                            subButton.type = "view";
                                            subButton.url  = subMenuInfo.Url;
                                        }
                                    }

                                    if (!isExists)
                                    {
                                        subButton.type = "view";
                                        subButton.url  = publishmentSystemUrl;
                                    }

                                    rootButton.sub_button.Add(subButton);
                                }
                            }
                            else
                            {
                                var isExists = false;

                                if (menuInfo.MenuType == EMenuType.Site)
                                {
                                    var pageUrl = string.Empty;
                                    if (menuInfo.ContentID > 0)
                                    {
                                        var tableStyle = NodeManager.GetTableStyle(PublishmentSystemInfo, menuInfo.ChannelID);
                                        var tableName  = NodeManager.GetTableName(PublishmentSystemInfo, menuInfo.ChannelID);

                                        var contentInfo = DataProvider.ContentDAO.GetContentInfoNotTrash(tableStyle, tableName, menuInfo.ContentID);
                                        if (contentInfo != null)
                                        {
                                            pageUrl = PageUtility.GetContentUrl(PublishmentSystemInfo, contentInfo, true);
                                        }
                                    }
                                    else
                                    {
                                        var nodeInfo = NodeManager.GetNodeInfo(PublishmentSystemID, menuInfo.ChannelID);
                                        if (nodeInfo != null)
                                        {
                                            pageUrl = PageUtility.GetChannelUrl(PublishmentSystemInfo, nodeInfo);
                                        }
                                    }

                                    if (!string.IsNullOrEmpty(pageUrl))
                                    {
                                        isExists        = true;
                                        rootButton.type = "view";
                                        rootButton.url  = PageUtils.AddProtocolToUrl(pageUrl);
                                    }
                                }
                                else if (menuInfo.MenuType == EMenuType.Keyword)
                                {
                                    if (KeywordManager.IsExists(PublishmentSystemID, menuInfo.Keyword))
                                    {
                                        isExists        = true;
                                        rootButton.type = "click";
                                        rootButton.key  = menuInfo.Keyword;
                                    }
                                }
                                else if (menuInfo.MenuType == EMenuType.Url)
                                {
                                    if (!string.IsNullOrEmpty(menuInfo.Url))
                                    {
                                        isExists        = true;
                                        rootButton.type = "view";
                                        rootButton.url  = menuInfo.Url;
                                    }
                                }

                                if (!isExists)
                                {
                                    rootButton.type = "view";
                                    rootButton.url  = publishmentSystemUrl;
                                }
                            }

                            resultFull.menu.button.Add(rootButton);
                        }

                        isSync = SyncMenu(resultFull, accountInfo, out errorMessage);
                    }
                    else
                    {
                        errorMessage = "您的微信公众号未绑定,请先绑定之后同步菜单";
                    }

                    if (isSync)
                    {
                        SuccessMessage("菜单同步成功,取消关注公众账号后再次关注,可以立即看到创建后的效果");
                    }
                    else
                    {
                        FailMessage($"菜单同步失败:{errorMessage}");
                        var logInfo = new ErrorLogInfo(0, DateTime.Now, errorMessage, string.Empty, "微信同步菜单错误");
                        LogUtils.AddErrorLog(logInfo);
                    }
                }
                catch (Exception ex)
                {
                    FailMessage($"菜单同步失败:{ex.Message}");

                    var logInfo = new ErrorLogInfo(0, DateTime.Now, ex.Message, ex.StackTrace, "微信同步菜单错误");
                    LogUtils.AddErrorLog(logInfo);
                }
            }
        }
        // GET: MPMenu
        public ActionResult Index()
        {
            var model = new MPMenuViewModel()
            {
                ResultFull = new GetMenuResultFull()
            };

            model.ResultFull.menu        = new MenuFull_ButtonGroup();
            model.ResultFull.menu.button = new List <MenuFull_RootButton>();

            var list        = GetWeiXinMPMenus();
            var rootButtons = list.FindAll(m => m.IsRoot == true);

            for (var i = 0; i < 3; i++)
            {
                MPMenuInfo rootButton = null;
                if (rootButtons.Count > i)
                {
                    rootButton = rootButtons[i];
                }
                else
                {
                    rootButton = new MPMenuInfo()
                    {
                        Col    = i,
                        IsRoot = true,
                        Type   = "click"
                    };
                }
                var rb = new MenuFull_RootButton()
                {
                    name       = rootButton.Name,
                    key        = rootButton.MenuKey,
                    type       = rootButton.Type,
                    url        = rootButton.MenuUrl,
                    sub_button = new List <MenuFull_RootButton>()
                };
                var buttons = list.FindAll(m => m.Col == rootButton.Col && m.IsRoot == false);
                for (int j = 0; j < 5; j++)
                {
                    MPMenuInfo button = null;
                    if (buttons.Count > j)
                    {
                        button = buttons[j];
                    }
                    else
                    {
                        button = new MPMenuInfo()
                        {
                            Col    = i,
                            Row    = j,
                            IsRoot = false,
                            Type   = "click"
                        };
                    }
                    var rsb = new MenuFull_RootButton()
                    {
                        name = button.Name,
                        key  = button.MenuKey,
                        type = button.Type,
                        url  = button.MenuUrl,
                    };
                    rb.sub_button.Add(rsb);
                }
                model.ResultFull.menu.button.Add(rb);
            }

            return(View(model));
        }