protected override string SendingMessage(WxMenuEventEntity entity, WxAccountEntity user, OutReplyTextHandler outReplyTextHandler, OutReplyImageTextHandler outReplyImageTextHandler) { switch (entity.EventKey.ToLower()) { case "exitall": ServantService.ServantServiceSoapClient servant = new ServantService.ServantServiceSoapClient(); ServantService.ServantInfoEntity model = servant.GetByOpenId(entity.FromUserName); if (model != null) { // 回复访客 SocketService.SocketServiceSoapClient socket = new SocketService.SocketServiceSoapClient(); SocketService.SocketP2PMessageEntity message = new SocketService.SocketP2PMessageEntity(); message.Sender = model.UserName; message.Receiver = "exitall"; message.Identity = "SERVANT"; message.Data = "exitall"; message.WeiXinNo = entity.ToUserName; message.OpenId = entity.FromUserName; message.Owner = model.UserId.ToString(); socket.SendMessageToP2PServer(message); } return(string.Empty); } return(base.SendingMessage(entity, user, outReplyTextHandler, outReplyImageTextHandler)); }
public string Save(string postStr, string signature, string timestamp, string nonce) { try { #region ==== 微信數據處理 ==== XmlDocument xml = new XmlDocument(); xml.LoadXml(postStr); TEntity entity = new TEntity(); Type type = typeof(TEntity); PropertyInfo[] propertyinfos = type.GetProperties(); foreach (var item in propertyinfos) { var list = xml.GetElementsByTagName(item.Name); if (item.Name == "ID") { item.SetValue(entity, 0, null); } else { string v = string.Empty; for (int i = 0; i < list.Count; i++) { if (list[i].ChildNodes[0].NodeType == System.Xml.XmlNodeType.CDATA) { v = list[i].ChildNodes[0].Value; } else { v = list[i].InnerText; } item.SetValue(entity, GetValueOfType(item, v), null); } } } LogCommonHelper.WriteLog("ToUserName:" + entity.ToUserName); WxAccountRepository cr = new WxAccountRepository(); var user = cr.FindByExpression(m => m.WeiXinNo == entity.ToUserName).FirstOrDefault(); if (user == null) { LogCommonHelper.WriteLog("开始处理微信标识"); var users = cr.FindByExpression(m => m.TokenStatus == 0).ToList(); if (users == null) { return(string.Empty); } foreach (var item in users) { string[] ArrTmp = { item.Token, timestamp, nonce }; Array.Sort(ArrTmp); string tmpStr = string.Join("", ArrTmp); tmpStr = CryptHelper.SHA1(tmpStr); tmpStr = tmpStr.ToLower(); if (tmpStr == signature) { LogCommonHelper.WriteLog("标识处理成功,开始更新信息"); item.WeiXinNo = entity.ToUserName; item.TokenStatus = 2; cr.Update(item.ID, item); LogCommonHelper.WriteLog("更新信息完成"); break; } } } if (user.IsSaveRecord) { TRepository respository = new TRepository(); respository.Add(entity); } #endregion OutReplyTextHandler outReplyTextHandler = new OutReplyTextHandler(OutReplyText); OutReplyImageTextHandler outReplyImageTextHandler = new OutReplyImageTextHandler(OutReplyImageText); return(SendingMessage(entity, user, outReplyTextHandler, outReplyImageTextHandler)); } catch (Exception ex) { LogCommonHelper.WriteLog("Exception:" + ex.InnerException.Message); return(string.Empty); } }
protected override string SendingMessage(WxTextEntity entity, WxAccountEntity user, OutReplyTextHandler outReplyTextHandler, OutReplyImageTextHandler outReplyImageTextHandler) { try { LogHelper.WriteLog("这是Text消息"); if (entity.Content.StartsWith("我是客服")) { string[] loginItems = entity.Content.Split(new char[] { '#' }); if (loginItems.Length == 3 && Equals(loginItems[0], "我是客服")) { LogHelper.WriteLog("这是客服登录请求"); string loginName = loginItems[1]; string loginPwd = CryptHelper.MD5(loginItems[2]); ServantService.ServantServiceSoapClient servant = new ServantService.ServantServiceSoapClient(); ServantService.ServantInfoEntity model = servant.Login(loginName, loginPwd); if (model != null) { LogHelper.WriteLog("登录成功"); bool b = servant.UpdateWeiXin(model.ID, entity.FromUserName, entity.ToUserName); LogHelper.WriteLog(b ? "更新微信信息成功" : "更新微信信息失败"); if (b) { // 发Socket消息,缓存到P2PServer SocketService.SocketServiceSoapClient socket = new SocketService.SocketServiceSoapClient(); SocketService.SocketP2PMessageEntity message = new SocketService.SocketP2PMessageEntity(); message.Sender = model.UserName; message.Identity = "SERVANT"; message.Data = "CHECKIDENTITY"; message.WeiXinNo = entity.ToUserName; message.OpenId = entity.FromUserName; message.Owner = model.UserId.ToString(); socket.SendMessageToP2PServer(message); return(string.Empty); } } } } else { string[] replys = entity.Content.Split(new char[] { '#' }); long cid = 0; if (long.TryParse(replys[0], out cid)) { ServantService.ServantServiceSoapClient servant = new ServantService.ServantServiceSoapClient(); ServantService.ServantInfoEntity model = servant.GetByOpenId(entity.FromUserName); if (model != null) { // 回复访客 SocketService.SocketServiceSoapClient socket = new SocketService.SocketServiceSoapClient(); SocketService.SocketP2PMessageEntity message = new SocketService.SocketP2PMessageEntity(); message.Sender = model.UserName; message.Receiver = replys[0]; message.Identity = "SERVANT"; message.Data = replys[1]; message.WeiXinNo = entity.ToUserName; message.OpenId = entity.FromUserName; message.Owner = model.UserId.ToString(); socket.SendMessageToP2PServer(message); return(string.Empty); } } } } catch (Exception ex) { LogHelper.WriteLog("Text SendingMessage Error:" + ex.InnerException.Message); } return(base.SendingMessage(entity, user, outReplyTextHandler, outReplyImageTextHandler)); }
protected virtual string SendingMessage(TEntity entity, WxAccountEntity user, OutReplyTextHandler outReplyTextHandler, OutReplyImageTextHandler outReplyImageTextHandler) { LogCommonHelper.WriteLog("开始回复"); var db = CoreDBContext.GetContext(); string keywords = this.GetKeyword(entity); LogCommonHelper.WriteLog("Keywords:" + keywords); if (string.IsNullOrEmpty(keywords)) { return(string.Empty); } LogCommonHelper.WriteLog("读取文本配置"); string[] kws = keywords.Split(new char[] { ' ' }); var tReply = (from x in db.Set <WxReplyTextEntity>() where x.UserName == user.UserName && x.Keyword != "subscribe" && x.MatchType == 1 ? (from y1 in (from x1 in db.Set <WxReplyTextEntity>() where x1.ID == x.ID select x1) .First() .Keyword .Split(new char[] { ' ' }).ToList() where y1 == keywords select y1).Any() : (from x2 in db.Set <WxReplyTextEntity>() where x2.ID == x.ID select x2) .First() .Keyword .Split(new char[] { ' ' }) .Contains(keywords) select x).FirstOrDefault(); if (tReply != null) { return(this.OutReplyText(entity, tReply)); } else { var itReply = (from x in db.Set <WxReplyImageTextEntity>() where x.UserName == user.UserName && x.Keyword != "subscribe" && x.MatchType == 1 ? (from y1 in (from x1 in db.Set <WxReplyImageTextEntity>() where x1.ID == x.ID select x1) .First() .Keyword .Split(new char[] { ' ' }).ToList() where y1 == keywords select y1).Any() : (from x2 in db.Set <WxReplyImageTextEntity>() where x2.ID == x.ID select x2) .First() .Keyword .Split(new char[] { ' ' }) .Contains(keywords) select x).FirstOrDefault(); if (itReply != null) { List <WxReplyImageTextEntity> itReplyList = new List <WxReplyImageTextEntity>(); if (!string.IsNullOrEmpty(itReply.WithIds)) { string[] withIds = itReply.WithIds.Split(new char[] { '|' }); itReplyList = (from m in db.Set <WxReplyImageTextEntity>() where m.UserName == user.UserName && m.Keyword != "subscribe" && withIds.Contains(SqlFunctions.StringConvert((decimal)m.ID).Trim()) select m).ToList(); } itReplyList.Insert(0, itReply); return(this.OutReplyImageText(entity, itReplyList)); } } return(string.Empty); }
protected override string SendingMessage(WxSubscribeEventEntity entity, WxAccountEntity user, OutReplyTextHandler OutReplyTextHandler, OutReplyImageTextHandler OutReplyImageTextHandler) { LogCommonHelper.WriteLog("开始处理关注/取消数据"); var db = CoreDBContext.GetContext(); //讀取配置 var config = (from x in db.Set <WxSubscribeConfigEntity>() where x.UserName == user.UserName select x).FirstOrDefault(); if (config != null) { if (config.IsSaveUser) { // 记录到服务的数据库 WxSubUserEntity subUser = new WxSubUserEntity(); subUser.UserName = user.UserName; subUser.OpenId = entity.FromUserName; WxSubUserRepository repository = new WxSubUserRepository(); repository.Add(subUser); // 记录到别人的数据库 if (string.IsNullOrWhiteSpace(config.SaveUrl) == false) { Uri uri = new Uri(config.SaveUrl); string url = string.Empty; if (string.IsNullOrEmpty(uri.Query)) { url = string.Format("{0}?openid={1}", config.SaveUrl, entity.FromUserName); } else { url = string.Format("{0}&openid={1}", config.SaveUrl, entity.FromUserName); } if (!string.IsNullOrEmpty(url)) { string html = WebHelper.GetFormWebRequest(url); } } } // 发送消息 WxReplyTextEntity textReply = null; List <WxReplyImageTextEntity> imageReply = null; switch (config.ReplyType.ToLower()) { case "text": textReply = (from x in db.Set <WxReplyTextEntity>() where x.UserName == user.UserName && x.Keyword == "subscribe" select x).FirstOrDefault(); break; case "imagetext": var itReply = (from x in db.Set <WxReplyImageTextEntity>() where x.UserName == user.UserName && x.Keyword == "subscribe" select x).FirstOrDefault(); if (itReply != null && !string.IsNullOrEmpty(itReply.WithIds)) { string[] withIds = itReply.WithIds.Split(new char[] { '|' }); imageReply = (from x in db.Set <WxReplyImageTextEntity>() where x.UserName == user.UserName && withIds.Contains(SqlFunctions.StringConvert((decimal)x.ID).Trim()) select x).ToList(); } imageReply.Insert(0, itReply); break; } if (textReply != null) { return(OutReplyTextHandler(entity, textReply)); } if (imageReply != null) { return(OutReplyImageTextHandler(entity, imageReply)); } } return(string.Empty); }