Ejemplo n.º 1
0
        internal void DbProcessMenuButton(MenuButtonMessage message)
        {
            W_WeChatInfoBLL weChatInfoBll = new W_WeChatInfoBLL();
            W_WeChatInfo    weChatInfo    = weChatInfoBll.GetByWechatID(message.ToUserName);

            if (weChatInfo == null)
            {
                return;
            }
            W_ResourcesCataBLL     resourcesCataBll  = new W_ResourcesCataBLL();
            List <W_ResourcesCata> resourcesCataList = resourcesCataBll.GetByWeChatInfo(weChatInfo);

            if (resourcesCataList.Count <= 0)
            {
                return;
            }
            W_KeyWordBLL keyWordBll = new W_KeyWordBLL();

            foreach (W_ResourcesCata resourcesCata in resourcesCataList)
            {
                List <W_KeyWord> keyWordList = keyWordBll.GetByResourcesCata(resourcesCata);
                foreach (W_KeyWord keyWord in keyWordList)
                {
                    if (message.EventKey == keyWord.WKey)
                    {
                        DoKeyWord(keyWord);
                        return;
                    }
                }
            }
        }
 internal void DbProcessMenuButton(MenuButtonMessage message)
 {
     W_WeChatInfoBLL weChatInfoBll = new W_WeChatInfoBLL();
     W_WeChatInfo weChatInfo = weChatInfoBll.GetByWechatID(message.ToUserName);
     if (weChatInfo == null)
     {
         return;
     }
     W_ResourcesCataBLL resourcesCataBll = new W_ResourcesCataBLL();
     List<W_ResourcesCata> resourcesCataList = resourcesCataBll.GetByWeChatInfo(weChatInfo);
     if (resourcesCataList.Count <= 0)
     {
         return;
     }
     W_KeyWordBLL keyWordBll = new W_KeyWordBLL();
     foreach (W_ResourcesCata resourcesCata in resourcesCataList)
     {
         List<W_KeyWord> keyWordList = keyWordBll.GetByResourcesCata(resourcesCata);
         foreach (W_KeyWord keyWord in keyWordList)
         {
             if (message.EventKey == keyWord.WKey)
             {
                 DoKeyWord(keyWord);
                 return;
             }
         }
     }
 }
Ejemplo n.º 3
0
        /// <summary>
        /// 指示 URL 验证是否成功。
        /// </summary>
        /// <param name="context">当前 Http 上下文。</param>
        /// <returns>验证是否成功。</returns>
        /// <exception cref="System.ArgumentNullException"><c>context</c> 为 null。</exception>
        private static bool IsSignature(HttpContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            List <string> tokens = new List <string>();

            // 获取数据库的 Token。
            W_WeChatInfoBLL bll = new W_WeChatInfoBLL();

            tokens.AddRange(bll.GetAll().Select(temp => temp.Token));

            // 获取 web.config 的 Token。
            if (string.IsNullOrEmpty(ConfigurationManager.AppSettings["Token"]) == false)
            {
                tokens.Add(ConfigurationManager.AppSettings["Token"]);
            }

            // 去重。
            tokens = tokens.Distinct().ToList();

            if (tokens.Count <= 0)
            {
                return(false);
            }
            else
            {
                // 尝试校验每个 Token。
                foreach (var token in tokens)
                {
                    // 微信加密签名,signature 结合了开发者填写的 token 参数和请求中的 timestamp 参数、nonce 参数。
                    string signature = context.Request["signature"] ?? string.Empty;
                    // 时间戳。
                    string timestamp = context.Request["timestamp"] ?? string.Empty;
                    // 随机数。
                    string nonce = context.Request["nonce"] ?? string.Empty;

                    // 将 token、timestamp、nonce 三个参数进行字典序排序并拼接成一个字符串。
                    string validateStr = string.Join(string.Empty, new string[] { token, timestamp, nonce }.OrderBy(temp => temp));

                    // 将验证字符串进行 sha1 加密并与 signature 对比,标识该请求来源于微信。
                    bool result = string.Equals(SHA1Helper.GetStringSHA1(validateStr), signature, StringComparison.OrdinalIgnoreCase);

                    if (result == true)
                    {
                        return(true);
                    }
                }
                return(false);
            }
        }
Ejemplo n.º 4
0
 internal void GetNamespaceFromDataBase()
 {
     if (this.Request != null)
     {
         string          toUserName = this.Request.ToUserName;
         W_WeChatInfoBLL bll        = new W_WeChatInfoBLL();
         W_WeChatInfo    weChatInfo = bll.GetByWechatID(toUserName);
         if (weChatInfo != null)
         {
             this.Namespace = weChatInfo.AppNamespace;
         }
     }
 }
Ejemplo n.º 5
0
        public static Menu LoadFromDataBaseByAppId(string appid)
        {
            W_WeChatInfoBLL weChatInfoBll = new W_WeChatInfoBLL();
            W_WeChatInfo    weChatInfo    = weChatInfoBll.GetByAppID(appid);
            W_MenuBLL       menuBll       = new W_MenuBLL();
            List <W_Menu>   menuButtons   = menuBll.GetByWeChatInfo(weChatInfo).OrderBy(temp => temp.Sort).ToList();// 获取对应的一级菜单并按 sort 排序。
            Menu            menu          = new Menu();

            foreach (W_Menu menuButton in menuButtons)
            {
                MenuButton button = new MenuButton();
                button.Name = menuButton.MenuName;
                if (menuButton.MenuType == "click")
                {
                    button.Type = MenuButtonType.Click;
                    button.Key  = menuButton.MenuKey;
                }
                else if (menuButton.MenuType == "view")
                {
                    button.Type = MenuButtonType.View;
                    button.Url  = menuButton.MenuURL;
                }

                List <W_Menu> menuSubButtons = menuBll.GetChildButtons(menuButton).OrderBy(temp => temp.Sort).ToList();
                foreach (W_Menu menuSubButton in menuSubButtons)
                {
                    MenuSubButton subButton = new MenuSubButton();
                    subButton.Name = menuButton.MenuName;
                    if (menuSubButton.MenuType == "click")
                    {
                        subButton.Type = MenuButtonType.Click;
                        subButton.Key  = menuButton.MenuKey;
                    }
                    else if (menuSubButton.MenuType == "view")
                    {
                        subButton.Type = MenuButtonType.View;
                        subButton.Url  = menuSubButton.MenuURL;
                    }

                    button.SubButton.Add(subButton);
                }

                menu.Button.Add(button);
            }

            return(menu);
        }
Ejemplo n.º 6
0
        internal void DbProcessText(TextMessage message)
        {
            W_WeChatInfoBLL weChatInfoBll = new W_WeChatInfoBLL();
            W_WeChatInfo    weChatInfo    = weChatInfoBll.GetByWechatID(message.ToUserName);

            if (weChatInfo == null)
            {
                return;
            }
            W_ResourcesCataBLL     resourcesCataBll  = new W_ResourcesCataBLL();
            List <W_ResourcesCata> resourcesCataList = resourcesCataBll.GetByWeChatInfo(weChatInfo);

            if (resourcesCataList.Count <= 0)
            {
                return;
            }
            W_KeyWordBLL keyWordBll = new W_KeyWordBLL();

            foreach (W_ResourcesCata resourcesCata in resourcesCataList)
            {
                List <W_KeyWord> keyWordList = keyWordBll.GetByResourcesCata(resourcesCata);
                foreach (W_KeyWord keyWord in keyWordList)
                {
                    if (keyWord.WOption == "Equals" && keyWord.WContent == message.Content)
                    {
                        DoKeyWord(keyWord);
                        return;
                    }
                    else if (keyWord.WOption == "EqualsIgnoreCase" &&
                             string.Equals(keyWord.WContent, message.Content, StringComparison.OrdinalIgnoreCase) == true)
                    {
                        DoKeyWord(keyWord);
                        return;
                    }
                    else if (keyWord.WOption == "Contains" && string.IsNullOrEmpty(message.Content) == false && message.Content.Contains(keyWord.WContent) == true)
                    {
                        DoKeyWord(keyWord);
                        return;
                    }
                    else if (keyWord.WOption == "ContainsIgnoreCase" && string.IsNullOrEmpty(message.Content) == false && message.Content.IndexOf(keyWord.WContent, StringComparison.OrdinalIgnoreCase) >= 0)
                    {
                        DoKeyWord(keyWord);
                        return;
                    }
                }
            }
        }
Ejemplo n.º 7
0
        public static Menu LoadFromDataBaseByAppId(string appid)
        {
            W_WeChatInfoBLL weChatInfoBll = new W_WeChatInfoBLL();
            W_WeChatInfo weChatInfo = weChatInfoBll.GetByAppID(appid);
            W_MenuBLL menuBll = new W_MenuBLL();
            List<W_Menu> menuButtons = menuBll.GetByWeChatInfo(weChatInfo).OrderBy(temp => temp.Sort).ToList();// 获取对应的一级菜单并按 sort 排序。
            Menu menu = new Menu();
            foreach (W_Menu menuButton in menuButtons)
            {
                MenuButton button = new MenuButton();
                button.Name = menuButton.MenuName;
                if (menuButton.MenuType == "click")
                {
                    button.Type = MenuButtonType.Click;
                    button.Key = menuButton.MenuKey;
                }
                else if (menuButton.MenuType == "view")
                {
                    button.Type = MenuButtonType.View;
                    button.Url = menuButton.MenuURL;
                }

                List<W_Menu> menuSubButtons = menuBll.GetChildButtons(menuButton).OrderBy(temp => temp.Sort).ToList();
                foreach (W_Menu menuSubButton in menuSubButtons)
                {
                    MenuSubButton subButton = new MenuSubButton();
                    subButton.Name = menuButton.MenuName;
                    if (menuSubButton.MenuType == "click")
                    {
                        subButton.Type = MenuButtonType.Click;
                        subButton.Key = menuButton.MenuKey;
                    }
                    else if (menuSubButton.MenuType == "view")
                    {
                        subButton.Type = MenuButtonType.View;
                        subButton.Url = menuSubButton.MenuURL;
                    }

                    button.SubButton.Add(subButton);
                }

                menu.Button.Add(button);
            }

            return menu;
        }
        private static AccessToken GetNewAccessToken(string appId)
        {
            W_WeChatInfoBLL bll = new W_WeChatInfoBLL();
            var temp = bll.GetByAppID(appId);

            string secret = temp == null ? string.Empty : temp.AppSecret;

            string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appId, secret);
            string responseBody = HttpHelper.Get(url);
            AccessTokenReturn weiXinReturn = JsonHelper.Deserialize<AccessTokenReturn>(responseBody);

            return new AccessToken()
            {
                CreateTime = DateTime.Now,
                Value = weiXinReturn.AccessToken,
                ExpiresIn = weiXinReturn.ExpiresIn
            };
        }
Ejemplo n.º 9
0
        private static AccessToken GetNewAccessToken(string appId)
        {
            W_WeChatInfoBLL bll  = new W_WeChatInfoBLL();
            var             temp = bll.GetByAppID(appId);

            string secret = temp == null ? string.Empty : temp.AppSecret;

            string            url          = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appId, secret);
            string            responseBody = HttpHelper.Get(url);
            AccessTokenReturn weiXinReturn = JsonHelper.Deserialize <AccessTokenReturn>(responseBody);

            return(new AccessToken()
            {
                CreateTime = DateTime.Now,
                Value = weiXinReturn.AccessToken,
                ExpiresIn = weiXinReturn.ExpiresIn
            });
        }
Ejemplo n.º 10
0
 internal void DbProcessText(TextMessage message)
 {
     W_WeChatInfoBLL weChatInfoBll = new W_WeChatInfoBLL();
     W_WeChatInfo weChatInfo = weChatInfoBll.GetByWechatID(message.ToUserName);
     if (weChatInfo == null)
     {
         return;
     }
     W_ResourcesCataBLL resourcesCataBll = new W_ResourcesCataBLL();
     List<W_ResourcesCata> resourcesCataList = resourcesCataBll.GetByWeChatInfo(weChatInfo);
     if (resourcesCataList.Count <= 0)
     {
         return;
     }
     W_KeyWordBLL keyWordBll = new W_KeyWordBLL();
     foreach (W_ResourcesCata resourcesCata in resourcesCataList)
     {
         List<W_KeyWord> keyWordList = keyWordBll.GetByResourcesCata(resourcesCata);
         foreach (W_KeyWord keyWord in keyWordList)
         {
             if (keyWord.WOption == "Equals" && keyWord.WContent == message.Content)
             {
                 DoKeyWord(keyWord);
                 return;
             }
             else if (keyWord.WOption == "EqualsIgnoreCase" &&
                      string.Equals(keyWord.WContent, message.Content, StringComparison.OrdinalIgnoreCase) == true)
             {
                 DoKeyWord(keyWord);
                 return;
             }
             else if (keyWord.WOption == "Contains" && string.IsNullOrEmpty(message.Content) == false && message.Content.Contains(keyWord.WContent) == true)
             {
                 DoKeyWord(keyWord);
                 return;
             }
             else if (keyWord.WOption == "ContainsIgnoreCase" && string.IsNullOrEmpty(message.Content) == false && message.Content.IndexOf(keyWord.WContent, StringComparison.OrdinalIgnoreCase) >= 0)
             {
                 DoKeyWord(keyWord);
                 return;
             }
         }
     }
 }
Ejemplo n.º 11
0
        /// <summary>
        /// 指示 URL 验证是否成功。
        /// </summary>
        /// <param name="context">当前 Http 上下文。</param>
        /// <returns>验证是否成功。</returns>
        /// <exception cref="System.ArgumentNullException"><c>context</c> 为 null。</exception>
        private static bool IsSignature(HttpContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            List<string> tokens = new List<string>();

            // 获取数据库的 Token。
            W_WeChatInfoBLL bll = new W_WeChatInfoBLL();
            tokens.AddRange(bll.GetAll().Select(temp => temp.Token));

            // 获取 web.config 的 Token。
            if (string.IsNullOrEmpty(ConfigurationManager.AppSettings["Token"]) == false)
            {
                tokens.Add(ConfigurationManager.AppSettings["Token"]);
            }

            // 去重。
            tokens = tokens.Distinct().ToList();

            if (tokens.Count <= 0)
            {
                return false;
            }
            else
            {
                // 尝试校验每个 Token。
                foreach (var token in tokens)
                {
                    // 微信加密签名,signature 结合了开发者填写的 token 参数和请求中的 timestamp 参数、nonce 参数。
                    string signature = context.Request["signature"] ?? string.Empty;
                    // 时间戳。
                    string timestamp = context.Request["timestamp"] ?? string.Empty;
                    // 随机数。
                    string nonce = context.Request["nonce"] ?? string.Empty;

                    // 将 token、timestamp、nonce 三个参数进行字典序排序并拼接成一个字符串。
                    string validateStr = string.Join(string.Empty, new string[] { token, timestamp, nonce }.OrderBy(temp => temp));

                    // 将验证字符串进行 sha1 加密并与 signature 对比,标识该请求来源于微信。
                    bool result = string.Equals(SHA1Helper.GetStringSHA1(validateStr), signature, StringComparison.OrdinalIgnoreCase);

                    if (result == true)
                    {
                        return true;
                    }
                }
                return false;
            }
        }
Ejemplo n.º 12
0
        public static bool SaveToDataBase(Menu menu, string appid)
        {
            try
            {
                #region delete current database menu
                W_WeChatInfoBLL weChatInfoBll = new W_WeChatInfoBLL();
                W_WeChatInfo    weChatInfo    = weChatInfoBll.GetByAppID(appid);
                W_MenuBLL       menuBll       = new W_MenuBLL();

                List <W_Menu> menus = menuBll.GetByWeChatInfo(weChatInfo);// 一级菜单

                foreach (W_Menu wMenu in menus)
                {
                    List <W_Menu> subMenus = menuBll.GetChildButtons(wMenu);

                    foreach (W_Menu subMenu in subMenus)
                    {
                        menuBll.Delete(subMenu);
                    }

                    menuBll.Delete(wMenu);
                }
                #endregion

                #region add current to database
                List <W_Menu> addList = new List <W_Menu>();
                foreach (var button in menu.Button)
                {
                    W_Menu w = new W_Menu();
                    w.MenuID   = Guid.NewGuid().ToString();
                    w.WID      = weChatInfo.WID;
                    w.MenuName = button.Name;
                    if (button.Type == MenuButtonType.Click)
                    {
                        w.MenuType = "click";
                        w.MenuKey  = button.Key;
                    }
                    else if (button.Type == MenuButtonType.View)
                    {
                        w.MenuType = "view";
                        w.MenuURL  = button.Key;
                    }
                    w.PMenuID      = "0";
                    w.ResponseType = "";
                    w.ResourcesID  = "";
                    w.CreateTime   = DateTime.Now;
                    w.IsDelete     = 0;

                    addList.Add(w);

                    foreach (var subButton in button.SubButton)
                    {
                        W_Menu ww = new W_Menu();
                        ww.MenuID   = Guid.NewGuid().ToString();
                        ww.WID      = Guid.NewGuid().ToString();
                        ww.MenuName = subButton.Name;
                        if (subButton.Type == MenuButtonType.Click)
                        {
                            ww.MenuType = "click";
                            ww.MenuKey  = subButton.Key;
                        }
                        else if (subButton.Type == MenuButtonType.View)
                        {
                            ww.MenuType = "view";
                            ww.MenuURL  = subButton.Url;
                        }
                        ww.PMenuID      = w.MenuID;
                        ww.ResponseType = "";
                        ww.ResourcesID  = "";
                        ww.CreateTime   = DateTime.Now;
                        ww.IsDelete     = 0;

                        addList.Add(ww);
                    }
                }

                foreach (var temp in addList)
                {
                    menuBll.Add(temp);
                }

                return(true);

                #endregion
            }
            catch
            {
                return(false);
            }
        }
Ejemplo n.º 13
0
        public static bool SaveToDataBase(Menu menu, string appid)
        {
            try
            {
                #region delete current database menu
                W_WeChatInfoBLL weChatInfoBll = new W_WeChatInfoBLL();
                W_WeChatInfo weChatInfo = weChatInfoBll.GetByAppID(appid);
                W_MenuBLL menuBll = new W_MenuBLL();

                List<W_Menu> menus = menuBll.GetByWeChatInfo(weChatInfo);// 一级菜单

                foreach (W_Menu wMenu in menus)
                {
                    List<W_Menu> subMenus = menuBll.GetChildButtons(wMenu);

                    foreach (W_Menu subMenu in subMenus)
                    {
                        menuBll.Delete(subMenu);
                    }

                    menuBll.Delete(wMenu);
                }
                #endregion

                #region add current to database
                List<W_Menu> addList = new List<W_Menu>();
                foreach (var button in menu.Button)
                {
                    W_Menu w = new W_Menu();
                    w.MenuID = Guid.NewGuid().ToString();
                    w.WID = weChatInfo.WID;
                    w.MenuName = button.Name;
                    if (button.Type == MenuButtonType.Click)
                    {
                        w.MenuType = "click";
                        w.MenuKey = button.Key;
                    }
                    else if (button.Type == MenuButtonType.View)
                    {
                        w.MenuType = "view";
                        w.MenuURL = button.Key;
                    }
                    w.PMenuID = "0";
                    w.ResponseType = "";
                    w.ResourcesID = "";
                    w.CreateTime = DateTime.Now;
                    w.IsDelete = 0;

                    addList.Add(w);

                    foreach (var subButton in button.SubButton)
                    {
                        W_Menu ww = new W_Menu();
                        ww.MenuID = Guid.NewGuid().ToString();
                        ww.WID = Guid.NewGuid().ToString();
                        ww.MenuName = subButton.Name;
                        if (subButton.Type == MenuButtonType.Click)
                        {
                            ww.MenuType = "click";
                            ww.MenuKey = subButton.Key;
                        }
                        else if (subButton.Type == MenuButtonType.View)
                        {
                            ww.MenuType = "view";
                            ww.MenuURL = subButton.Url;
                        }
                        ww.PMenuID = w.MenuID;
                        ww.ResponseType = "";
                        ww.ResourcesID = "";
                        ww.CreateTime = DateTime.Now;
                        ww.IsDelete = 0;

                        addList.Add(ww);
                    }
                }

                foreach (var temp in addList)
                {
                    menuBll.Add(temp);
                }

                return true;
                #endregion
            }
            catch
            {
                return false;
            }
        }