Exemplo n.º 1
0
        /// <summary>
        /// 推送纯文字————跳到客服
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public IResponseMessageBase GetResponseMessageTxt_kefu(RequestMessageText requestMessage, int Indexid, int wid)
        {
            var    responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageTransfer_Customer_Service>(requestMessage);
            string openid          = requestMessage.FromUserName;

            string token = ConvertDateTimeInt(DateTime.Now).ToString();
            //    requestMessage.Content = "欢迎咨询";
            string xml = " <xml><ToUserName><![CDATA[" + responseMessage.FromUserName + "]]></ToUserName> <FromUserName><![CDATA[" + responseMessage.ToUserName + "]]></FromUserName> <CreateTime>" + responseMessage.CreateTime + "</CreateTime> <MsgType><![CDATA[" + responseMessage.MsgType + "]]></MsgType> <TransInfo> <KfAccount><![CDATA[kf2001@anju0088]]></KfAccount></TransInfo></xml>";
            //     ResponseMessageBase.CreateFromResponseXml(xml);
            var    result   = UserApi.Info(stoce(), openid);
            string pickname = result.nickname;
            string image    = result.headimgurl;

            // string xml = " <xml><ToUserName><![CDATA[" + responseMessage.FromUserName + "]]></ToUserName> <FromUserName><![CDATA[" + responseMessage.ToUserName + "]]></FromUserName> <CreateTime>" + responseMessage.CreateTime + "</CreateTime> <MsgType><![CDATA["+responseMessage.MsgType+"]]></MsgType> <TransInfo> <KfAccount><![CDATA[VIP_zql_99@anju0088]]></KfAccount></TransInfo></xml>";
            //ResponseMessageTransfer_Customer_Service.CreateFromResponseXml(xml);
            wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "Transfer_Customer_Service", responseMessage.MsgType.ToString(), requestMessage.ToUserName, pickname, image);
            //responseMessage.Content ="openid=" + requestMessage.FromUserName;
            CustomerServiceAccount ss = new CustomerServiceAccount();

            ss.KfAccount = "kf2001@anju0088";
            List <CustomerServiceAccount> listss = new List <CustomerServiceAccount>();

            listss.Add(ss);
            responseMessage.TransInfo = listss;
            return(responseMessage);
        }
Exemplo n.º 2
0
        public virtual ResponseMessageBase ToResponseMessage()
        {
            var res = new ResponseMessageTransfer_Customer_Service();

            foreach (var tras in this.TransInfo)
            {
                var a = new CustomerServiceAccount()
                {
                    KfAccount = tras.KfAccount,
                };
                res.TransInfo.Add(a);
            }
            return(res);
        }
Exemplo n.º 3
0
        public IResponseMessageBase GetResponseMessageTxt_kefu2(RequestMessageText requestMessage, int Indexid, int wid)
        {
            if (requestMessage.Content == "连接客服")
            {
                var    responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageTransfer_Customer_Service>(requestMessage);
                string openid          = requestMessage.FromUserName;

                string token    = ConvertDateTimeInt(DateTime.Now).ToString();
                var    result   = UserApi.Info(stoce(), openid);
                string pickname = result.nickname;
                string image    = result.headimgurl;
                wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "Transfer_Customer_Service", responseMessage.MsgType.ToString(), requestMessage.ToUserName, pickname, image);

                CustomerServiceAccount ss = new CustomerServiceAccount();
                ss.KfAccount = "VIP_zql_99@anju0088";
                List <CustomerServiceAccount> listss = new List <CustomerServiceAccount>();
                listss.Add(ss);
                responseMessage.TransInfo = listss;

                return(responseMessage);
            }
            else
            {
                var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage);

                string openid   = requestMessage.FromUserName;
                string token    = ConvertDateTimeInt(DateTime.Now).ToString();
                var    result   = UserApi.Info(stoce(), openid);
                string pickname = result.nickname;
                string image    = result.headimgurl;
                responseMessage.Content = getDataTxtComm(wid, Indexid, openid, token);
                wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "text", responseMessage.Content, requestMessage.ToUserName, pickname, image);
                //responseMessage.Content ="openid=" + requestMessage.FromUserName;
                return(responseMessage);
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// 添加客服帐号
        /// </summary>
        /// <param name="accessToken"></param>
        /// <param name="kf_account"></param>
        /// <param name="nickname"></param>
        /// <returns></returns>
        public static CustomerServiceCreateAccountResponse CreateCustomerServiceAccount(string accessToken, string kf_account, string nickname)
        {
            CustomerServiceAccount msg = new CustomerServiceAccount()
            {
                AccessToken = accessToken,
                kf_account  = kf_account,
                nickname    = nickname
            };
            IMpClient mpClient = new MpClient();
            string    sendData = msg.ToJsonString();
            CustomerServiceCreateAccountRequest request = new CustomerServiceCreateAccountRequest()
            {
                AccessToken = accessToken,
                SendData    = sendData
            };
            CustomerServiceCreateAccountResponse response = mpClient.Execute(request);

            if (response.IsError)
            {
                Utility.LogHelper.WriteDebug("创建客服", sendData);
                Utility.LogHelper.WriteDebug("创建客服", response.Body);
            }
            return(response);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 根据XML信息填充实实体
        /// </summary>
        /// <typeparam name="T">MessageBase为基类的类型,Response和Request都可以</typeparam>
        /// <param name="entity">实体</param>
        /// <param name="doc">XML</param>
        public static void FillEntityWithXml <T>(this T entity, XDocument doc) where T : /*MessageBase*/ class, new()
        {
            entity = entity ?? new T();
            var root = doc.Root;

            var props = entity.GetType().GetProperties();

            foreach (var prop in props)
            {
                var propName = prop.Name;
                if (root.Element(propName) != null)
                {
                    switch (prop.PropertyType.Name)
                    {
                    //case "String":
                    //    goto default;
                    case "DateTime":
                        prop.SetValue(entity, DateTimeHelper.GetDateTimeFromXml(root.Element(propName).Value), null);
                        break;

                    case "Boolean":
                        if (propName == "FuncFlag")
                        {
                            prop.SetValue(entity, root.Element(propName).Value == "1", null);
                        }
                        else
                        {
                            goto default;
                        }
                        break;

                    case "Int32":
                        prop.SetValue(entity, int.Parse(root.Element(propName).Value), null);
                        break;

                    case "Int64":
                        prop.SetValue(entity, long.Parse(root.Element(propName).Value), null);
                        break;

                    case "Double":
                        prop.SetValue(entity, double.Parse(root.Element(propName).Value), null);
                        break;

                    //以下为枚举类型
                    case "RequestMsgType":
                        //已设为只读
                        //prop.SetValue(entity, MsgTypeHelper.GetRequestMsgType(root.Element(propName).Value), null);
                        break;

                    case "ResponseMsgType":    //Response适用
                        //已设为只读
                        //prop.SetValue(entity, MsgTypeHelper.GetResponseMsgType(root.Element(propName).Value), null);
                        break;

                    case "Event":
                        //已设为只读
                        //prop.SetValue(entity, EventHelper.GetEventType(root.Element(propName).Value), null);
                        break;

                    //以下为实体类型
                    case "List`1":                                 //List<T>类型,ResponseMessageNews适用
                        var genericArguments = prop.PropertyType.GetGenericArguments();
                        if (genericArguments[0].Name == "Article") //ResponseMessageNews适用
                        {
                            //文章下属节点item
                            List <Article> articles = new List <Article>();
                            foreach (var item in root.Element(propName).Elements("item"))
                            {
                                var article = new Article();
                                FillEntityWithXml(article, new XDocument(item));
                                articles.Add(article);
                            }
                            prop.SetValue(entity, articles, null);
                        }
                        else if (genericArguments[0].Name == "Account")
                        {
                            List <CustomerServiceAccount> accounts = new List <CustomerServiceAccount>();
                            foreach (var item in root.Elements(propName))
                            {
                                var account = new CustomerServiceAccount();
                                FillEntityWithXml(account, new XDocument(item));
                                accounts.Add(account);
                            }
                            prop.SetValue(entity, accounts, null);
                        }
                        else if (genericArguments[0].Name == "PicItem")
                        {
                            List <PicItem> picItems = new List <PicItem>();
                            foreach (var item in root.Elements(propName).Elements("item"))
                            {
                                var    picItem   = new PicItem();
                                var    picMd5Sum = item.Element("PicMd5Sum").Value;
                                Md5Sum md5Sum    = new Md5Sum()
                                {
                                    PicMd5Sum = picMd5Sum
                                };
                                picItem.item = md5Sum;
                                picItems.Add(picItem);
                            }
                            prop.SetValue(entity, picItems, null);
                        }
                        break;

                    case "Music":    //ResponseMessageMusic适用
                        Music music = new Music();
                        FillEntityWithXml(music, new XDocument(root.Element(propName)));
                        prop.SetValue(entity, music, null);
                        break;

                    case "Image":    //ResponseMessageImage适用
                        Image image = new Image();
                        FillEntityWithXml(image, new XDocument(root.Element(propName)));
                        prop.SetValue(entity, image, null);
                        break;

                    case "Voice":    //ResponseMessageVoice适用
                        Voice voice = new Voice();
                        FillEntityWithXml(voice, new XDocument(root.Element(propName)));
                        prop.SetValue(entity, voice, null);
                        break;

                    case "Video":    //ResponseMessageVideo适用
                        Video video = new Video();
                        FillEntityWithXml(video, new XDocument(root.Element(propName)));
                        prop.SetValue(entity, video, null);
                        break;

                    case "ScanCodeInfo":    //扫码事件中的ScanCodeInfo适用
                        ScanCodeInfo scanCodeInfo = new ScanCodeInfo();
                        FillEntityWithXml(scanCodeInfo, new XDocument(root.Element(propName)));
                        prop.SetValue(entity, scanCodeInfo, null);
                        break;

                    case "SendLocationInfo":    //弹出地理位置选择器的事件推送中的SendLocationInfo适用
                        SendLocationInfo sendLocationInfo = new SendLocationInfo();
                        FillEntityWithXml(sendLocationInfo, new XDocument(root.Element(propName)));
                        prop.SetValue(entity, sendLocationInfo, null);
                        break;

                    case "SendPicsInfo":    //系统拍照发图中的SendPicsInfo适用
                        SendPicsInfo sendPicsInfo = new SendPicsInfo();
                        FillEntityWithXml(sendPicsInfo, new XDocument(root.Element(propName)));
                        prop.SetValue(entity, sendPicsInfo, null);
                        break;

                    default:
                        prop.SetValue(entity, root.Element(propName).Value, null);
                        break;
                    }
                }
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// 根据XML信息填充实实体
        /// </summary>
        /// <typeparam name="T">MessageBase为基类的类型,Response和Request都可以</typeparam>
        /// <param name="entity">实体</param>
        /// <param name="doc">XML</param>
        public static void FillEntityWithXml <T>(this T entity, XDocument doc) where T : /*MessageBase*/ class, new()
        {
            entity = entity ?? new T();
            var root = doc.Root;

            if (root == null)
            {
                return;//无法处理
            }

            var props = entity.GetType().GetProperties();

            foreach (var prop in props)
            {
                var propName = prop.Name;
                if (root.Element(propName) != null)
                {
                    switch (prop.PropertyType.Name)
                    {
                    //case "String":
                    //    goto default;
                    case "DateTime":
                    case "Int32":
                    case "Int64":
                    case "Double":
                    case "Nullable`1":     //可为空对象
                        EntityUtility.FillSystemType(entity, prop, root.Element(propName).Value);
                        break;

                    case "Boolean":
                        if (propName == "FuncFlag")
                        {
                            EntityUtility.FillSystemType(entity, prop, root.Element(propName).Value == "1");
                        }
                        else
                        {
                            goto default;
                        }
                        break;

                    //以下为枚举类型
                    case "RequestMsgType":
                        //已设为只读
                        //prop.SetValue(entity, MsgTypeHelper.GetRequestMsgType(root.Element(propName).Value), null);
                        break;

                    case "ResponseMsgType":     //Response适用
                        //已设为只读
                        //prop.SetValue(entity, MsgTypeHelper.GetResponseMsgType(root.Element(propName).Value), null);
                        break;

                    case "Event":
                        //已设为只读
                        //prop.SetValue(entity, EventHelper.GetEventType(root.Element(propName).Value), null);
                        break;

                    //以下为实体类型
                    case "List`1":     //List<T>类型,ResponseMessageNews适用
                    {
                        var genericArguments        = prop.PropertyType.GetGenericArguments();
                        var genericArgumentTypeName = genericArguments[0].Name;
                        if (genericArgumentTypeName == "Article")
                        {
                            //文章下属节点item
                            List <Article> articles = new List <Article>();
                            foreach (var item in root.Element(propName).Elements("item"))
                            {
                                var article = new Article();
                                FillEntityWithXml(article, new XDocument(item));
                                articles.Add(article);
                            }
                            prop.SetValue(entity, articles, null);
                        }
                        else if (genericArgumentTypeName == "Account")
                        {
                            List <CustomerServiceAccount> accounts = new List <CustomerServiceAccount>();
                            foreach (var item in root.Elements(propName))
                            {
                                var account = new CustomerServiceAccount();
                                FillEntityWithXml(account, new XDocument(item));
                                accounts.Add(account);
                            }
                            prop.SetValue(entity, accounts, null);
                        }
                        else if (genericArgumentTypeName == "PicItem")
                        {
                            List <PicItem> picItems = new List <PicItem>();
                            foreach (var item in root.Elements(propName).Elements("item"))
                            {
                                var    picItem   = new PicItem();
                                var    picMd5Sum = item.Element("PicMd5Sum").Value;
                                Md5Sum md5Sum    = new Md5Sum()
                                {
                                    PicMd5Sum = picMd5Sum
                                };
                                picItem.item = md5Sum;
                                picItems.Add(picItem);
                            }
                            prop.SetValue(entity, picItems, null);
                        }
                        else if (genericArgumentTypeName == "AroundBeacon")
                        {
                            List <AroundBeacon> aroundBeacons = new List <AroundBeacon>();
                            foreach (var item in root.Elements(propName).Elements("AroundBeacon"))
                            {
                                var aroundBeaconItem = new AroundBeacon();
                                FillEntityWithXml(aroundBeaconItem, new XDocument(item));
                                aroundBeacons.Add(aroundBeaconItem);
                            }
                            prop.SetValue(entity, aroundBeacons, null);
                        }
                        else if (genericArgumentTypeName == "CopyrightCheckResult_ResultList")        //RequestMessageEvent_MassSendJobFinish
                        {
                            List <CopyrightCheckResult_ResultList> resultList = new List <CopyrightCheckResult_ResultList>();
                            foreach (var item in root.Elements("ResultList").Elements("item"))
                            {
                                CopyrightCheckResult_ResultList resultItem = new CopyrightCheckResult_ResultList();
                                FillEntityWithXml(resultItem.item, new XDocument(item));
                                resultList.Add(resultItem);
                            }
                            prop.SetValue(entity, resultList, null);
                        }
                        break;
                    }

                    case "Music":    //ResponseMessageMusic适用
                        FillClassValue <Music>(entity, root, propName, prop);
                        break;

                    case "Image":    //ResponseMessageImage适用
                        FillClassValue <Image>(entity, root, propName, prop);
                        break;

                    case "Voice":    //ResponseMessageVoice适用
                        FillClassValue <Voice>(entity, root, propName, prop);
                        break;

                    case "Video":    //ResponseMessageVideo适用
                        FillClassValue <Video>(entity, root, propName, prop);
                        break;

                    case "ScanCodeInfo":    //扫码事件中的ScanCodeInfo适用
                        FillClassValue <ScanCodeInfo>(entity, root, propName, prop);
                        break;

                    case "SendLocationInfo":    //弹出地理位置选择器的事件推送中的SendLocationInfo适用
                        FillClassValue <SendLocationInfo>(entity, root, propName, prop);
                        break;

                    case "SendPicsInfo":    //系统拍照发图中的SendPicsInfo适用
                        FillClassValue <SendPicsInfo>(entity, root, propName, prop);
                        break;

                    case "ChosenBeacon":    //摇一摇事件通知
                        FillClassValue <ChosenBeacon>(entity, root, propName, prop);
                        break;

                    case "AroundBeacon":    //摇一摇事件通知
                        FillClassValue <AroundBeacon>(entity, root, propName, prop);
                        break;

                        #region RequestMessageEvent_MassSendJobFinish
                    case "CopyrightCheckResult":
                        FillClassValue <CopyrightCheckResult>(entity, root, propName, prop);
                        break;

                    case "CopyrightCheckResult_ResultList_Item":
                        FillClassValue <CopyrightCheckResult_ResultList_Item>(entity, root, "item", prop);
                        break;
                        #endregion

                    default:
                        var enumSuccess = false;
                        if (prop.PropertyType.IsEnum)
                        {
                            //未知的枚举类型
                            try
                            {
                                prop.SetValue(entity, Enum.Parse(prop.PropertyType, root.Element(propName).Value, true), null);
                                enumSuccess = true;
                            }
                            catch {
                            }
                        }

                        if (!enumSuccess)
                        {
                            prop.SetValue(entity, root.Element(propName).Value, null);
                        }
                        break;
                    }
                }
            }
        }
Exemplo n.º 7
0
        /// <summary>
        /// 跳转客服
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <param name="Indexid"></param>
        /// <param name="wid"></param>
        /// <returns></returns>
        ///

        public IResponseMessageBase GetResponseMessageTxt(RequestMessageText requestMessage, int Indexid, int wid)
        {
            BLL.wx_userweixin   wBll       = new XCWeiXin.BLL.wx_userweixin();
            Model.wx_userweixin weixininfo = wBll.GetModel(wid);
            string weixincode = weixininfo.weixinCode;
            int    contt      = Account_count();


            //   if(a<contt)

            string str = requestMessage.Content;

            if (str.Contains("客服"))
            {
                string str_new = str.Replace("客服", "");
                if (str_new == "1")
                {
                    str_new = "4";
                }
                if (str_new == "2")
                {
                    str_new = "5";
                }
                if (str_new == "3")
                {
                    str_new = "6";
                }

                string kfcoont = "kf200" + str_new + "@" + weixincode;
                if (Zaixian().Trim().ToString().Contains(kfcoont))
                {
                    var    responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageTransfer_Customer_Service>(requestMessage);
                    string openid          = requestMessage.FromUserName;

                    string token = ConvertDateTimeInt(DateTime.Now).ToString();

                    var    result   = UserApi.Info(stoce(), openid);
                    string pickname = result.nickname;
                    string image    = result.headimgurl;
                    wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "Transfer_Customer_Service", responseMessage.MsgType.ToString(), requestMessage.ToUserName, pickname, image);

                    CustomerServiceAccount ss = new CustomerServiceAccount();
                    ss.KfAccount = "kf200" + str_new + "@" + weixincode;
                    List <CustomerServiceAccount> listss = new List <CustomerServiceAccount>();
                    listss.Add(ss);
                    responseMessage.TransInfo = listss;
                    return(responseMessage);
                }
                else
                {
                    var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage);

                    string openid = requestMessage.FromUserName;
                    string token  = ConvertDateTimeInt(DateTime.Now).ToString();
                    responseMessage.Content = getDataTxtComm(wid, Indexid, openid, token);
                    var    result   = UserApi.Info(stoce(), openid);
                    string pickname = result.nickname;
                    string image    = result.headimgurl;
                    wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "text", responseMessage.Content, requestMessage.ToUserName, pickname, image);
                    responseMessage.Content = "客服" + str_new + "不在线,请稍后再试!";
                    return(responseMessage);
                }
            }
            else
            {
                ///进入文字处理
                var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage);

                string openid = requestMessage.FromUserName;
                string token  = ConvertDateTimeInt(DateTime.Now).ToString();
                responseMessage.Content = getDataTxtComm(wid, Indexid, openid, token);
                var    result   = UserApi.Info(stoce(), openid);
                string pickname = result.nickname;
                string image    = result.headimgurl;
                wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "text", responseMessage.Content, requestMessage.ToUserName, pickname, image);
                //responseMessage.Content ="openid=" + requestMessage.FromUserName;
                return(responseMessage);
            }
        }
Exemplo n.º 8
0
        /// <summary>
        /// 推送纯文字
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <param name="Indexid"></param>
        /// <param name="wid"></param>
        /// <returns></returns>
        public IResponseMessageBase GetResponseMessageTxt_zhaohang(RequestMessageText requestMessage, int Indexid, int wid)
        {
            //   if(a<contt)

            string str = requestMessage.Content;


            if (str.Contains("客服"))
            {
                BLL.wx_userweixin   wBll       = new XCWeiXin.BLL.wx_userweixin();
                Model.wx_userweixin weixininfo = wBll.GetModel(wid);
                string weixincode = weixininfo.weixinCode;
                int    contt      = int.Parse(Account_count_1());

                string str_new = str.Replace("客服", "");

                if (int.Parse(str_new) > contt)
                {
                    var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage);

                    string openid = requestMessage.FromUserName;
                    string token  = ConvertDateTimeInt(DateTime.Now).ToString();
                    responseMessage.Content = getDataTxtComm(wid, Indexid, openid, token);
                    var    result   = UserApi.Info(stoce(), openid);
                    string pickname = result.nickname;
                    string image    = result.headimgurl;
                    wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "text", responseMessage.Content, requestMessage.ToUserName, pickname, image);
                    //responseMessage.Content ="openid=" + requestMessage.FromUserName;
                    responseMessage.Content = "不存在客服" + int.Parse(str_new) + "!";
                    return(responseMessage);
                }
                else
                {
                    string              kfcoont = "";
                    int                 number  = 1;
                    BLL.wx_userweixin   bll     = new BLL.wx_userweixin();
                    Model.wx_userweixin model   = bll.GetModel(wid);
                    number = int.Parse(model.extInt.ToString());
                    if (int.Parse(str_new) < 10)
                    {
                        kfcoont = "kf200" + (int.Parse(str_new) + number) + "@" + weixincode;
                    }
                    else
                    {
                        kfcoont = "kf20" + (int.Parse(str_new) + number) + "@" + weixincode;
                    }

                    if (Zaixian().Contains(kfcoont))
                    {
                        var    responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageTransfer_Customer_Service>(requestMessage);
                        string openid          = requestMessage.FromUserName;

                        string token    = ConvertDateTimeInt(DateTime.Now).ToString();
                        var    result   = UserApi.Info(stoce(), openid);
                        string pickname = result.nickname;
                        string image    = result.headimgurl;
                        wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "Transfer_Customer_Service", responseMessage.MsgType.ToString(), requestMessage.ToUserName, pickname, image);

                        CustomerServiceAccount ss = new CustomerServiceAccount();
                        ss.KfAccount = kfcoont;
                        List <CustomerServiceAccount> listss = new List <CustomerServiceAccount>();
                        listss.Add(ss);
                        responseMessage.TransInfo = listss;


                        return(responseMessage);
                    }
                    else
                    {
                        var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage);

                        string openid = requestMessage.FromUserName;
                        string token  = ConvertDateTimeInt(DateTime.Now).ToString();
                        responseMessage.Content = getDataTxtComm(wid, Indexid, openid, token);
                        var    result   = UserApi.Info(stoce(), openid);
                        string pickname = result.nickname;
                        string image    = result.headimgurl;
                        wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "text", responseMessage.Content, requestMessage.ToUserName, pickname, image);
                        responseMessage.Content = "客服" + str_new + "不在线,请稍后再试!";
                        return(responseMessage);
                    }
                }
            }
            else if (str.Contains("小招"))
            {
                var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage);

                string openid = requestMessage.FromUserName;

                string token = ConvertDateTimeInt(DateTime.Now).ToString();
                //responseMessage.Content = getDataTxtComm(wid, Indexid, openid, token);
                var    result   = UserApi.Info(stoce(), openid);
                string pickname = result.nickname;
                string image    = result.headimgurl;
                wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "text", responseMessage.Content, requestMessage.ToUserName, pickname, image);

                wxResponseBaseMgr.updata_1(str, openid);
                responseMessage.Content = "消息已受到,请耐心等待!切勿输入其他文字";
                return(responseMessage);
            }
            else
            {
                ///进入文字处理
                var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage);
                //<xml>
                //  <ToUserName><![CDATA[oFo2Hjq6_yMhyz6cQ2MZtmxODOVU]]></ToUserName>
                //  <FromUserName><![CDATA[gh_2cb6c9131eb6]]></FromUserName>
                //  <CreateTime>1472450395</CreateTime>
                //  <MsgType><![CDATA[text]]></MsgType>
                //  <Content><![CDATA[hello]]></Content>
                //</xml>
                string openid  = requestMessage.ToUserName;
                string openids = requestMessage.FromUserName;

                //  string openid = requestMessage.ToUserName;
                string token = ConvertDateTimeInt(DateTime.Now).ToString();
                responseMessage.Content = getDataTxtComm(wid, Indexid, openid, token);
                var    result   = UserApi.Info(stoce(), openids);
                string pickname = result.nickname;
                string image    = result.headimgurl;

                wxResponseBaseMgr dd      = new wxResponseBaseMgr();
                string            extstr3 = dd.ccc(openids);


                wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "text", responseMessage.Content, requestMessage.ToUserName, pickname, image);
                wxResponseBaseMgr.updata(extstr3, openids);


                //responseMessage.Content ="openid=" + requestMessage.FromUserName;
                return(responseMessage);
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// 根据XML信息填充实实体
        /// </summary>
        /// <typeparam name="T">MessageBase为基类的类型,Response和Request都可以</typeparam>
        /// <param name="entity">实体</param>
        /// <param name="doc">XML</param>
        public static void FillEntityWithXml <T>(this T entity, XDocument doc) where T : /*MessageBase*/ class, new()
        {
            if (doc == null)
            {
                throw new ArgumentNullException(nameof(doc));
            }

            var root = doc.Root;

            if (doc.Root == null)
            {
                throw new ArgumentNullException(nameof(doc.Root));
            }

            if (entity == null)
            {
                throw new ArgumentNullException(nameof(entity));
            }

            //entity = entity ?? new T();

            var props = entity.GetType().GetProperties();

            foreach (var prop in props)
            {
                if (!prop.CanWrite)
                {
                    continue;//如果不可读则跳过
                }

                var propName = prop.Name;
                if (root.Element(propName) != null)
                {
                    switch (prop.PropertyType.Name)
                    {
                    //case "String":
                    //    goto default;
                    case "DateTime":
                    case "DateTimeOffset":
                    case "Int32":
                    case "Int64":
                    case "Double":
                    case "Nullable`1":     //可为空对象
                        EntityUtility.FillSystemType(entity, prop, root.Element(propName).Value);
                        break;

                    case "Boolean":
                        if (propName == "FuncFlag")
                        {
                            EntityUtility.FillSystemType(entity, prop, root.Element(propName).Value == "1");
                        }
                        else
                        {
                            goto default;
                        }
                        break;

                    //以下为枚举类型
                    case "RequestMsgType":
                        //已设为只读
                        //prop.SetValue(entity, MsgTypeHelper.GetRequestMsgType(root.Element(propName).Value), null);
                        break;

                    case "ResponseMsgType":     //Response适用
                        //已设为只读
                        //prop.SetValue(entity, MsgTypeHelper.GetResponseMsgType(root.Element(propName).Value), null);
                        break;

                    case "Event":
                        //已设为只读
                        //prop.SetValue(entity, EventHelper.GetEventType(root.Element(propName).Value), null);
                        break;

                    //以下为实体类型
                    case "List`1":     //List<T>类型,ResponseMessageNews适用
                    {
                        var genericArguments        = prop.PropertyType.GetGenericArguments();
                        var genericArgumentTypeName = genericArguments[0].Name;
                        if (genericArgumentTypeName == "Article")
                        {
                            //文章下属节点item
                            List <Article> articles = new List <Article>();
                            foreach (var item in root.Element(propName).Elements("item"))
                            {
                                var article = new Article();
                                FillEntityWithXml(article, new XDocument(item));
                                articles.Add(article);
                            }
                            prop.SetValue(entity, articles, null);
                        }
                        else if (genericArgumentTypeName == "Account")
                        {
                            List <CustomerServiceAccount> accounts = new List <CustomerServiceAccount>();
                            foreach (var item in root.Elements(propName))
                            {
                                var account = new CustomerServiceAccount();
                                FillEntityWithXml(account, new XDocument(item));
                                accounts.Add(account);
                            }
                            prop.SetValue(entity, accounts, null);
                        }
                        else if (genericArgumentTypeName == "PicItem")
                        {
                            List <PicItem> picItems = new List <PicItem>();
                            foreach (var item in root.Elements(propName).Elements("item"))
                            {
                                var    picItem   = new PicItem();
                                var    picMd5Sum = item.Element("PicMd5Sum").Value;
                                Md5Sum md5Sum    = new Md5Sum()
                                {
                                    PicMd5Sum = picMd5Sum
                                };
                                picItem.item = md5Sum;
                                picItems.Add(picItem);
                            }
                            prop.SetValue(entity, picItems, null);
                        }
                        else if (genericArgumentTypeName == "AroundBeacon")
                        {
                            List <AroundBeacon> aroundBeacons = new List <AroundBeacon>();
                            foreach (var item in root.Elements(propName).Elements("AroundBeacon"))
                            {
                                var aroundBeaconItem = new AroundBeacon();
                                FillEntityWithXml(aroundBeaconItem, new XDocument(item));
                                aroundBeacons.Add(aroundBeaconItem);
                            }
                            prop.SetValue(entity, aroundBeacons, null);
                        }
                        else if (genericArgumentTypeName == "CopyrightCheckResult_ResultList")        //RequestMessageEvent_MassSendJobFinish
                        {
                            List <CopyrightCheckResult_ResultList> resultList = new List <CopyrightCheckResult_ResultList>();
                            foreach (var item in root.Elements("ResultList").Elements("item"))
                            {
                                CopyrightCheckResult_ResultList resultItem = new CopyrightCheckResult_ResultList();
                                FillEntityWithXml(resultItem.item, new XDocument(item));
                                resultList.Add(resultItem);
                            }
                            prop.SetValue(entity, resultList, null);
                        }
                        //企业微信
                        else if (genericArguments[0].Name == "MpNewsArticle")
                        {
                            List <MpNewsArticle> mpNewsArticles = new List <MpNewsArticle>();
                            foreach (var item in root.Elements(propName))
                            {
                                var mpNewsArticle = new MpNewsArticle();
                                FillEntityWithXml(mpNewsArticle, new XDocument(item));
                                mpNewsArticles.Add(mpNewsArticle);
                            }
                            prop.SetValue(entity, mpNewsArticles, null);
                        }
                        break;
                    }

                    case "Music":    //ResponseMessageMusic适用
                        FillClassValue <Music>(entity, root, propName, prop);
                        break;

                    case "Image":    //ResponseMessageImage适用
                        FillClassValue <Image>(entity, root, propName, prop);
                        break;

                    case "Voice":    //ResponseMessageVoice适用
                        FillClassValue <Voice>(entity, root, propName, prop);
                        break;

                    case "Video":    //ResponseMessageVideo适用
                        FillClassValue <Video>(entity, root, propName, prop);
                        break;

                    case "ScanCodeInfo":    //扫码事件中的ScanCodeInfo适用
                        FillClassValue <ScanCodeInfo>(entity, root, propName, prop);
                        break;

                    case "SendLocationInfo":    //弹出地理位置选择器的事件推送中的SendLocationInfo适用
                        FillClassValue <SendLocationInfo>(entity, root, propName, prop);
                        break;

                    case "SendPicsInfo":    //系统拍照发图中的SendPicsInfo适用
                        FillClassValue <SendPicsInfo>(entity, root, propName, prop);
                        break;

                    case "ChosenBeacon":    //摇一摇事件通知
                        FillClassValue <ChosenBeacon>(entity, root, propName, prop);
                        break;

                    case "AroundBeacon":    //摇一摇事件通知
                        FillClassValue <AroundBeacon>(entity, root, propName, prop);
                        break;

                        #region 开放平台-小程序
                    case "ThirdFasteRegisterInfo":     //开放平台-小程序-快速注册
                        FillClassValue <ThirdFasteRegisterInfo>(entity, root, propName, prop);
                        break;
                        #endregion

                        #region RequestMessageEvent_MassSendJobFinish
                    case "CopyrightCheckResult":
                        FillClassValue <CopyrightCheckResult>(entity, root, propName, prop);
                        break;

                    case "CopyrightCheckResult_ResultList_Item":
                        FillClassValue <CopyrightCheckResult_ResultList_Item>(entity, root, "item", prop);
                        break;
                        #region 企业号

                        /* 暂时放在Work.dll中
                         *                      case "AgentType":
                         *                          {
                         *                              AgentType tp;
                         #if NET35
                         *                              try
                         *                              {
                         *                                  tp = (AgentType)Enum.Parse(typeof(AgentType), root.Element(propName).Value, true);
                         *                                  prop.SetValue(entity, tp, null);
                         *                              }
                         *                              catch
                         *                              {
                         *
                         *                              }
                         #else
                         *                              if (Enum.TryParse(root.Element(propName).Value, out tp))
                         *                              {
                         *                                  prop.SetValue(entity, tp, null);
                         *                              }
                         #endif
                         *                              break;
                         *                          }
                         *                      case "Receiver":
                         *                          {
                         *                              Receiver receiver = new Receiver();
                         *                              FillEntityWithXml(receiver, new XDocument(root.Element(propName)));
                         *                              prop.SetValue(entity, receiver, null);
                         *                              break;
                         *                          }
                         */
                        #endregion

                        #endregion

                    default:
                        var enumSuccess = false;
                        if (prop.PropertyType.IsEnum)
                        {
                            //未知的枚举类型
                            try
                            {
                                prop.SetValue(entity, Enum.Parse(prop.PropertyType, root.Element(propName).Value, true), null);
                                enumSuccess = true;
                            }
                            catch
                            {
                            }
                        }

                        if (!enumSuccess)
                        {
                            prop.SetValue(entity, root.Element(propName).Value, null);
                        }
                        break;
                    }
                }
            }
        }