Beispiel #1
0
        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);
        }
Beispiel #5
0
        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);
        }