Exemple #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));
        }
Exemple #2
0
        private dynamic RequestNewToken(WxAccountEntity user, string appKey)
        {
            int times = 0;
            AccessTokenEntity entity = null;
            string            data   = string.Empty;

            while (times < 3)
            {
                NameValueCollection parameters = new NameValueCollection();
                parameters.Add("appid", user.AppId);
                parameters.Add("secret", user.Secret);
                parameters.Add("grant_type", user.GrantType);
                // 发送Token请求
                data = GetFromWebRequest(ConstHelper.WEIXIN_ACCESS_TOKEN, "GET", parameters);

                if (data.Contains("access_token"))
                {
                    entity = JsonHelper.Deserialize <AccessTokenEntity>(data);
                    break;
                }
                else
                {
                    Thread.Sleep(1000 * 1);
                    times++;
                }
            }

            if (entity != null)
            {
                ApplicationHelper.SetValue(appKey,
                                           new AccessTokenCacheEntity {
                    AccessToken = entity.access_token, RequstTime = DateTime.Now
                });
                return(entity);
            }
            else
            {
                if (string.IsNullOrWhiteSpace(data))
                {
                    return(JsonHelper.Deserialize <ErrorEntity>(ConstHelper.ERROR_100004));
                }
                else
                {
                    var model = JsonHelper.Deserialize <ErrorEntity>(data);
                    return(GetErrorChineseMessage(model));
                }
            }
        }
        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(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));
        }
Exemple #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);
        }