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; } } } }
/// <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); } }
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; } } }
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); }
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; } } } }
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 }; }
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 }); }
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; } } } }
/// <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; } }
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); } }
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; } }