Example #1
0
        /// <summary>
        /// 菜单点击事件
        /// </summary>
        public override IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage)
        {
            IResponseMessageBase reponseMessage = null;

            Common.MessageFunction cmfun = new Common.MessageFunction();

            string keywords  = requestMessage.EventKey; //查询关健字
            int    accountId = cmfun.GetAccountId();    //公众账户ID

            string EventName = "";

            if (requestMessage.Event.ToString().Trim() != "")
            {
                EventName = requestMessage.Event.ToString();
            }
            else if (requestMessage.EventKey != null)
            {
                EventName += requestMessage.EventKey.ToString();
            }

            if (!cmfun.ExistsOriginalId(accountId, requestMessage.ToUserName))
            {  //验证接收方是否为我们系统配置的帐号,即验证微帐号与微信原始帐号id是否一致,如果不一致,说明【1】配置错误,【2】数据来源有问题
                new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "none", "未取到关键词对应的数据", requestMessage.ToUserName);
                return(cmfun.GetResponseMessageTxtByContent(requestMessage, "验证微帐号与微信原始帐号id不一致,可能原因【1】系统配置错误,【2】非法的数据来源有问题", accountId));
            }

            int responseType = 0; //回复类型
            int ruleId       = new BLL.weixin_request_rule().GetKeywordsRuleId(accountId, string.Empty, out responseType);

            if (ruleId == 0)
            {
                new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "none", "未取到关键词对应的数据", requestMessage.ToUserName);
                return(cmfun.GetResponseMessageTxtByContent(requestMessage, "", accountId));
            }
            switch (responseType)
            {
            case 1:
                //发送纯文字
                reponseMessage = cmfun.GetResponseMessageTxt(requestMessage, ruleId, accountId);
                break;

            case 2:
                //发送多图文
                reponseMessage = cmfun.GetResponseMessageNews(requestMessage, ruleId, accountId);
                break;

            case 3:
                //发送语音
                reponseMessage = cmfun.GetResponseMessageeMusic(requestMessage, ruleId, accountId);
                break;

            default:
                break;
            }
            return(reponseMessage);
        }
        /// <summary>
        /// 处理文字请求
        /// </summary>
        public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage)
        {
            IResponseMessageBase IR = null;

            Common.MessageFunction  cmfun   = new Common.MessageFunction();
            BLL.weixin_request_rule ruleBLL = new BLL.weixin_request_rule();
            int accountId = 0;

            try
            {
                string keywords = requestMessage.Content; //发送了文字信息
                accountId = cmfun.GetAccountId();         //获取公众账户ID

                //验证公众账户原始ID是否一致
                if (!cmfun.ExistsOriginalId(accountId, requestMessage.ToUserName))
                {
                    new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "none", "验证微帐号与微信原始帐号id不一致,说明【1】配置错误,【2】数据来源有问题", requestMessage.ToUserName);
                    return(cmfun.GetResponseMessageTxtByContent(requestMessage, "验证微帐号与微信原始帐号id不一致,可能原因【1】系统配置错误,【2】非法的数据来源", accountId));
                }

                int responseType = 0;
                int ruleId       = ruleBLL.GetKeywordsRuleId(accountId, keywords, out responseType);
                if (ruleId <= 0 || responseType <= 0)
                {
                    new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "none", "未取到关键词对应的数据", requestMessage.ToUserName);
                    return(cmfun.GetResponseMessageTxtByContent(requestMessage, "未找到匹配的关键词", accountId));
                }
                switch (responseType)
                {
                case 1:
                    //发送纯文字
                    IR = cmfun.GetResponseMessageTxt(requestMessage, ruleId, accountId);
                    break;

                case 2:
                    //发送多图文
                    IR = cmfun.GetResponseMessageNews(requestMessage, ruleId, accountId);
                    break;

                case 3:
                    //发送语音
                    IR = cmfun.GetResponseMessageeMusic(requestMessage, ruleId, accountId);
                    break;

                default:
                    break;
                }
                new BLL.weixin_response_content().Add(accountId, requestMessage.MsgType.ToString(), requestMessage.FromUserName, requestMessage.CreateTime.ToString(), requestMessage.Content, requestMessage.ToString(), string.Empty);
            }
            catch (Exception ex)
            {
            }
            return(IR);
        }
        /// <summary>
        /// 菜单点击事件
        /// </summary>
        public override IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage)
        {
            IResponseMessageBase reponseMessage = null;
            Common.MessageFunction cmfun = new Common.MessageFunction();

            string keywords = requestMessage.EventKey; //查询关健字
            int accountId = cmfun.GetAccountId(); //公众账户ID

            string EventName = "";
            if (requestMessage.Event.ToString().Trim() != "")
            {
                EventName = requestMessage.Event.ToString();
            }
            else if (requestMessage.EventKey != null)
            {
                EventName += requestMessage.EventKey.ToString();
            }

            if (!cmfun.ExistsOriginalId(accountId, requestMessage.ToUserName))
            {  //验证接收方是否为我们系统配置的帐号,即验证微帐号与微信原始帐号id是否一致,如果不一致,说明【1】配置错误,【2】数据来源有问题
                new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "none", "未取到关键词对应的数据", requestMessage.ToUserName);
                return cmfun.GetResponseMessageTxtByContent(requestMessage, "验证微帐号与微信原始帐号id不一致,可能原因【1】系统配置错误,【2】非法的数据来源有问题", accountId);
            }

            int responseType = 0; //回复类型
            int ruleId = new BLL.weixin_request_rule().GetKeywordsRuleId(accountId, string.Empty, out responseType);
            if (ruleId == 0)
            {
                new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "none", "未取到关键词对应的数据", requestMessage.ToUserName);
                return cmfun.GetResponseMessageTxtByContent(requestMessage, "", accountId);
            }
            switch (responseType)
            {
                case 1:
                    //发送纯文字
                    reponseMessage = cmfun.GetResponseMessageTxt(requestMessage, ruleId, accountId);
                    break;
                case 2:
                    //发送多图文
                    reponseMessage = cmfun.GetResponseMessageNews(requestMessage, ruleId, accountId);
                    break;
                case 3:
                    //发送语音
                    reponseMessage = cmfun.GetResponseMessageeMusic(requestMessage, ruleId, accountId);
                    break;
                default:
                    break;
            }
            return reponseMessage;
        }
Example #4
0
        /// <summary>
        /// 点击事件
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public override IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage)
        {
            //菜单点击,需要跟创建菜单时的Key匹配
            IResponseMessageBase IR = null;

            Common.MessageFunction cmfun = new Common.MessageFunction();
            int responseType = 0, ruleId = 0;

            string keywords = requestMessage.EventKey; //事件key

            //先精确匹配,再模糊匹配
            Core.WeixinRequestRule rule = Core.WeixinRequestRule.Find(Core.WeixinRequestRule._.Keywords == keywords & Core.WeixinRequestRule._.RequestType == (int)Core.WeixinRequestRule.XRequestType.CustomMenu);

            if (rule == null)
            {
                //找不到规则
                Core.WeixinResponseContent entity = new Core.WeixinResponseContent()
                {
                    OpenId         = requestMessage.FromUserName,
                    RequestType    = requestMessage.MsgType.ToString(),
                    RequestContent = requestMessage.EventKey,
                    ResponseType   = "none",
                    ReponseContent = "未取到相应的事件规则",
                    XmlContent     = requestMessage.ToUserName
                };
                entity.Insert();
                return(cmfun.GetResponseMessageTxtByContent(requestMessage, "未取到相应的事件规则", 0));
            }
            responseType = rule.ResponseType;
            ruleId       = rule.Id;
            switch (responseType)
            {
            case (int)Core.WeixinRequestRule.XResponseType.Text:
                //发送纯文字
                IR = cmfun.GetResponseMessageTxt(requestMessage, ruleId, 0);
                break;

            case (int)Core.WeixinRequestRule.XResponseType.Image:
                //发送多图文
                IR = cmfun.GetResponseMessageNews(requestMessage, ruleId, 0);
                break;

            case (int)Core.WeixinRequestRule.XResponseType.Voice:
                //发送语音
                IR = cmfun.GetResponseMessageeMusic(requestMessage, ruleId, 0);
                break;

            case (int)Core.WeixinRequestRule.XResponseType.SingleImage:
                IR = cmfun.GetResponseMessageSingleImagesContent(requestMessage, ruleId, 0);
                break;

            default:
                break;
            }
            Core.WeixinResponseContent model = new Core.WeixinResponseContent()
            {
                OpenId         = requestMessage.FromUserName,
                RequestType    = requestMessage.MsgType.ToString(),
                RequestContent = requestMessage.EventKey,
                ResponseType   = Core.WeixinResponseContent.GetResponseType((int)requestMessage.MsgType),
                ReponseContent = requestMessage.ToString(),
                XmlContent     = string.Empty
            };
            model.Insert();

            return(IR);
        }
Example #5
0
        /// <summary>
        /// 处理文字请求
        /// </summary>
        /// <param name="requestMessage">请求消息</param>
        /// <returns></returns>
        public override async Task <IResponseMessageBase> OnTextRequestAsync(RequestMessageText requestMessage)
        {
            var defaultResponseMessage = base.CreateResponseMessage <ResponseMessageText>();
            IResponseMessageBase IR    = null;

            Common.MessageFunction cmfun = new Common.MessageFunction();
            int ruleId = 0;

            var requestHandler = await requestMessage.StartHandler().Default(async() =>
            {
                string keywords = requestMessage.Content;
                if (!string.IsNullOrEmpty(keywords))
                {
                    keywords = keywords.Trim();
                }

                var currentMessageContext = await base.GetCurrentMessageContext();

                //先精确匹配,再模糊匹配
                Core.WeixinRequestRule rule = Core.WeixinRequestRule.Find(Core.WeixinRequestRule._.Keywords == keywords & Core.WeixinRequestRule._.RequestType == (int)Core.WeixinRequestRule.XRequestType.Text);

                if (rule == null)
                {
                    //模糊匹配
                    IList <Core.WeixinRequestRule> listRule = Core.WeixinRequestRule.FindAll(Core.WeixinRequestRule._.RequestType == (int)Core.WeixinRequestRule.XRequestType.Text & Core.WeixinRequestRule._.IsLikeQuery == 1, null, null, 0, 0);
                    if (listRule != null && listRule.Count > 0)
                    {
                        int lenKeyword = keywords.Length;
                        foreach (var item in listRule)
                        {
                            if (lenKeyword >= item.Keywords.Length && keywords.IndexOf(item.Keywords) >= 0)
                            {
                                rule = item;//规则
                                break;
                            }
                        }
                    }
                }
                if (rule == null)
                {
                    Core.WeixinRequestRule notFindKeywordRule = Core.WeixinRequestRule.Find(Core.WeixinRequestRule._.RequestType == (int)Core.WeixinRequestRule.XRequestType.NotFindKeyword);
                    if (notFindKeywordRule == null)
                    {
                        //找不到规则
                        Core.WeixinResponseContent entity = new Core.WeixinResponseContent()
                        {
                            OpenId         = requestMessage.FromUserName,
                            RequestType    = requestMessage.MsgType.ToString(),
                            RequestContent = requestMessage.Content,
                            ResponseType   = "none",
                            ReponseContent = "未取到关键词对应的数据",
                            XmlContent     = requestMessage.ToUserName
                        };
                        entity.Insert();
                        return(cmfun.GetResponseMessageTxtByContent(requestMessage, "未找到匹配的关键词", 0));
                    }
                    else
                    {
                        ruleId = notFindKeywordRule.Id;
                        switch (notFindKeywordRule.ResponseType)
                        {
                        case (int)Core.WeixinRequestRule.XResponseType.Text:
                            //发送纯文字
                            IR = cmfun.GetResponseMessageTxt(requestMessage, ruleId, 0);
                            break;

                        case (int)Core.WeixinRequestRule.XResponseType.Image:
                            //发送多图文
                            IR = cmfun.GetResponseMessageNews(requestMessage, ruleId, 0);
                            break;

                        case (int)Core.WeixinRequestRule.XResponseType.Voice:
                            //发送语音
                            IR = cmfun.GetResponseMessageeMusic(requestMessage, ruleId, 0);
                            break;

                        case (int)Core.WeixinRequestRule.XResponseType.SingleImage:
                            IR = cmfun.GetResponseMessageSingleImagesContent(requestMessage, ruleId, 0);
                            break;

                        default:
                            break;
                        }
                        return(IR);
                    }
                }
                Core.WeixinResponseContent model = new Core.WeixinResponseContent()
                {
                    OpenId         = requestMessage.FromUserName,
                    RequestType    = requestMessage.MsgType.ToString(),
                    RequestContent = requestMessage.Content,
                    ResponseType   = Core.WeixinResponseContent.GetResponseType((int)requestMessage.MsgType),
                    ReponseContent = requestMessage.ToString(),
                    XmlContent     = string.Empty
                };
                model.Insert();


                return(IR);
            });

            return(requestHandler.GetResponseMessage() as IResponseMessageBase);
        }