public static void InsertUserSubcribeLog(UserSubscribeLog userlog) { using (WeChatDbContext entity = new WeChatDbContext()) { entity.UserSubscribeLogs.Add(userlog); entity.SaveChanges(); } }
public void Weixin() { string weChat = ConfigurationManager.AppSettings["WeChatId"].ToString(); string templateId = ConfigurationManager.AppSettings["TemplateId"].ToString(); WeChatUser user = new WeChatUser(); UserSubscribeLog userlog = new UserSubscribeLog(); string accessToken = WeChatHelper.GetAccessToken(); StreamReader stream = new StreamReader(Request.InputStream); XElement xml = XElement.Load(stream); // 发送方帐号(open_id) string fromUserName = GetXmlNodeValue(xml, "FromUserName"); // 公众帐号 string toUserName = GetXmlNodeValue(xml, "ToUserName"); // 消息类型 string msgType = GetXmlNodeValue(xml, "MsgType"); string eventKey = String.Empty; string MsgId = String.Empty; if (GetXmlNodeValue(xml, "EventKey") != "") { eventKey = GetXmlNodeValue(xml, "EventKey"); } if (GetXmlNodeValue(xml, "MsgId") != "") { MsgId = GetXmlNodeValue(xml, "MsgId"); } user.OpenId = fromUserName; userlog.OpenId = fromUserName; XDocument xdoc = new XDocument(); try { #region Event if (msgType == "event") { string eventType = GetXmlNodeValue(xml, "Event"); if (eventType == "subscribe") { user.OpenId = fromUserName; user.Subscribe = 1; user.SubscribeTime = DateTime.Now; user.LastUpdateStateTime = DateTime.Now; user = WeChatHelper.GetSubscirbeUserInfo(accessToken, fromUserName); userlog.LastUpdateTime = DateTime.Now; userlog.Subcribe = 1; try { if ((eventKey != null) && (eventKey != "")) { if (eventKey.StartsWith("qrscene_")) { user.LastSubscribeChannel = Int32.Parse(eventKey.Split('_')[1].ToString()); userlog.Channel = user.LastSubscribeChannel; } } } catch { } DbServices.InsertUserSubcribeLog(userlog); DbServices.InsertNewSubscribeUser(user); List<Message> msglist = DbServices.GetMessage("subscribe"); YACHelper.SetYACUserOpenId(user.OpenId, user.LastSubscribeChannel); string returnXml = WeChatHelper.ResponseMessage(msglist, user.OpenId); Response.Write(returnXml); } if (eventType == "unsubscribe") { user.OpenId = fromUserName; user.Subscribe = 0; user.LastUpdateStateTime = DateTime.Now; //WeChatHelper.GetSubscirbeUserInfo(accessToken, fromUserName); userlog.Subcribe = 0; userlog.Channel = 0; userlog.LastUpdateTime = DateTime.Now; DbServices.InsertUserSubcribeLog(userlog); DbServices.UpdateUser(user); YACHelper.SetYACCancelUserOpenId(user.OpenId, user.LastSubscribeChannel); } if (eventType == "LOCATION") { } if (eventType == "CLICK") { if (eventKey != "") { List<Message> msglist = DbServices.GetMessage(eventKey); if ((msglist != null) && (msglist.Count > 0)) { string returnXml = WeChatHelper.ResponseMessage(msglist, user.OpenId); Response.Write(returnXml); } } } if (eventType == "VIEW") { } } #endregion #region Text if (msgType == "text") { //Response.Write(""); string content = GetXmlNodeValue(xml, "Content"); UserMessage um = new UserMessage(); um.Content = content; um.OpenId = user.OpenId; um.MsgId = MsgId; um.MessageType = "text"; //string withoutTrim = content.Trim(); #region 正常消息反馈机制 int start = Int32.Parse(ConfigurationManager.AppSettings["WorkStart"].ToString()); int end = Int32.Parse(ConfigurationManager.AppSettings["WorkEnd"].ToString()); if ((DateTime.Now.Hour > end) || (DateTime.Now.Hour < start))//晚上9点以后,早上8点以前,自动回复 { um.ResponseType = "AutoMsg"; DbServices.InsertUserMessage(um); StringBuilder message = new StringBuilder(); string words = ConfigurationManager.AppSettings["NightWords"].ToString(); message.Append(words); string returnMsg = WeChatHelper.ResponseMessage(message.ToString(), user.OpenId, weChat); Response.Write(returnMsg); } else { if (content == "养爱车求")//特殊关键字 { um.ResponseType = "AutoMsg"; DbServices.InsertUserMessage(um); StringBuilder message = new StringBuilder(); message.Append("后台地址:http://120.132.59.94/bk/"); message.Append("公司电话:400 0102 766"); message.Append("请牢记!"); string returnMsg = WeChatHelper.ResponseMessage(message.ToString(), user.OpenId, weChat); Response.Write(returnMsg); } else { KeyWord kw = DbServices.FindMyKeyword(content); if (kw != null)//关键字匹配 { if (!String.IsNullOrEmpty(kw.MsgKeyValue))//检查消息的keyvalue是否为空,如果不为空,则返回匹配value的消息列表 { um.ResponseType = "AutoKey"; um.ResponseKeValue = kw.MsgKeyValue; DbServices.InsertUserMessage(um); List<Message> msglist = DbServices.GetMessage(kw.MsgKeyValue); if ((msglist != null) && (msglist.Count > 0)) { string returnXml = WeChatHelper.ResponseMessage(msglist, user.OpenId); Response.Write(returnXml); } } else//读取关键字内容 { um.ResponseType = "AutoMsg"; um.ResponseId = kw.KeyWordId; DbServices.InsertUserMessage(um); var staff = DbServices.GetStaff(user.OpenId); string returnMsg = WeChatHelper.ResponseMessage(kw.Content, user.OpenId, weChat); Response.Write(returnMsg); } } else//非关键字匹配 { if (!DbServices.IsExistMessage(um)) { DbServices.InsertUserMessage(um); string returnContent = "骚扰大家了,客户向后台发送了文字消息,消息如下:" + content; bool isSendTemplateMsg = Convert.ToBoolean(ConfigurationManager.AppSettings["TemplateMsgOpen"].ToString()); if (isSendTemplateMsg) { List<Staff> staffList = DbServices.GetStaffList(); var wechatUser = DbServices.GetUserInfo(user.OpenId); string nickname = "养爱车粉丝"; if (wechatUser != null) { nickname = wechatUser.NickName; } foreach (var staff in staffList) { if (staff.IsEnabled) { if (!String.IsNullOrEmpty(staff.OpenId)) { string returnMsg = WeChatHelper.ResponseTemplateMessage(content, staff.OpenId, templateId, nickname); if (!staff.IsSend)//标记是否已经给这个人发送过模板消息了 { staff.IsSend = true; WeChatHelper.PostTemplateMessage(returnMsg, accessToken); } } } } } string responseStr = WeChatHelper.ResponseDKFMessage(user.OpenId, weChat); Response.Write(responseStr); } } } } #endregion } #endregion #region Image if (msgType == "image") { UserMessage um = new UserMessage(); string MediaId = GetXmlNodeValue(xml, "MediaId"); string PicUrl = GetXmlNodeValue(xml, "PicUrl"); um.PicUrl = PicUrl; um.OpenId = user.OpenId; um.MessageType = "image"; um.MsgId = MsgId; um.MediaId = MediaId; DbServices.InsertUserMessage(um); bool isNullKeyValue = Boolean.Parse(ConfigurationManager.AppSettings["NullKeyValue"].ToString()); if (isNullKeyValue) { Response.Write(""); } else { UserSubscribeLog userSubscribeLog = DbServices.GetUserSubcribeLogInfo(user.OpenId); if (userSubscribeLog != null) { string message = "欢迎关注养爱车:),您可以从加油站工作人员那里领取养爱车提供的小礼品(每人限领1份)。"; string returnMsg = WeChatHelper.ResponseMessage(message, user.OpenId, weChat); Response.Write(returnMsg); } } if (DateTime.Now.Hour > 22) { } } #endregion #region Vioce if (msgType == "voice") { string MediaId = GetXmlNodeValue(xml, "MediaId"); string Format = GetXmlNodeValue(xml, "Format"); UserMessage um = new UserMessage(); um.OpenId = um.OpenId; um.MediaId = MediaId; um.MsgId = MsgId; um.MessageType = "voice"; DbServices.InsertUserMessage(um); } #endregion #region Link if (msgType == "link") { string Title = GetXmlNodeValue(xml, "Title"); string Description = GetXmlNodeValue(xml, "Description"); string Url = GetXmlNodeValue(xml, "Url"); UserMessage um = new UserMessage(); um.OpenId = um.OpenId; um.Url = Url; um.Title = Title; um.Description = Description; um.MsgId = MsgId; um.MessageType = "link"; DbServices.InsertUserMessage(um); } #endregion } catch { Response.Write(""); } //return ""; }