예제 #1
0
 private void FillSection(string code, ref ContactTransfer transfer, XmlNode requestXml)
 {
     foreach (var property in transfer.GetType().GetFields())
     {
         foreach (var childNode in
                  requestXml.ChildNodes.Cast <XmlNode>().Where(childNode => childNode.Name == (code + property.Name) && childNode.ChildNodes.Count > 0))
         {
             SetValueForProperty(property, transfer, childNode.ChildNodes[0].Value);
         }
     }
 }
예제 #2
0
 /// <summary>
 /// Процедура заполнения беревода без открытия счета
 /// </summary>
 /// <param name="transfer">Перевод</param>
 /// <param name="xmlRecord">XML запрос</param>
 private void FillTransfer(ContactTransfer transfer, XmlNode xmlRecord)
 {
     FillSection("trn", ref transfer, xmlRecord);
     FillSectionFees("trn", ref transfer.Fee, xmlRecord);
     FillSectionPerson("s", ref transfer.Sender, xmlRecord);
     FillSectionAddress("s", ref transfer.Sender.Address, xmlRecord);
     FillSectionIds("s", ref transfer.Sender.Id, xmlRecord);
     FillSectionPerson("b", ref transfer.Resiver, xmlRecord);
     FillSectionAddress("b", ref transfer.Resiver.Address, xmlRecord);
     FillSectionIds("b", ref transfer.Resiver.Id, xmlRecord);
     FillSectionPoint("PICKUP_POINT_INFO", ref transfer.Pickup, xmlRecord);
 }
예제 #3
0
        public Response OnNewData(string data)
        {
            var reader = new XmlTextReader(new MemoryStream(Encoding.Default.GetBytes(data)));

            if (reader.Read())
            {
                var xmldoc = new XmlDocument();
                xmldoc.LoadXml(data);

                switch (reader.Name.ToUpper())
                {
                case "REQUEST":
                    Console.WriteLine("Пришел REQUEST");
                    var request = GetRequest(data);

                    if (request.OBJECT_CLASS == "TMoneyOrderObject")
                    {
                        var nodeList = xmldoc.SelectNodes("REQUEST");

                        if (nodeList != null && nodeList.Count == 1)
                        {
                            var transfer = new ContactTransfer
                            {
                                Direction =
                                    request.ACTION.Contains("Outgoing")
                                                               ? ContactTransferDirection.Outgoing
                                                               : ContactTransferDirection.Incoming
                            };

                            FillTransfer(transfer, nodeList[0]);
                            Requests.Add(request.REQUEST_ID, transfer);

                            OnNewTransfer(new ParcerNewTrasferEventArgs(request, null, transfer));
                            return(new Response {
                                ReturnCode = 0, ErrorText = "", ViewErrorText = ""
                            });
                        }
                    }
                    break;

                case "RESPONSE":
                    Console.WriteLine("Пришел RESPONSE");

                    var response = GetResponse(xmldoc);

                    if (response.RE == 0)
                    {
                        var xml = new XmlDocument();
                        xml.LoadXml(data);

                        var nodeList = xml.SelectNodes("RESPONSE/TRN_DATA/RESPONSE");

                        if (nodeList != null && nodeList.Count == 1)
                        {
                            var xmlRecord        = nodeList[0];
                            var responseTransfer = GetResponse(xmlRecord, false);

                            if (!Requests.ContainsKey(response.REQUEST_ID))
                            {
                                return new Response {
                                           ReturnCode = 60, ErrorText = "Пришел ответ, но запроса нет в Базе. Код: 60", ViewErrorText = "Пришел ответ, но запроса нет в Базе. Код: 60"
                                }
                            }
                            ;

                            var transfer = Requests[response.REQUEST_ID];
                            // Обновить данные из заголовка
                            transfer.Status = (ContactTransferStatus)responseTransfer.STATE;
                            FillTransfer(transfer, xmlRecord);
                            OnNewTransfer(new ParcerNewTrasferEventArgs(null, responseTransfer, transfer));
                        }

                        return(new Response {
                            ReturnCode = 0, ErrorText = "", ViewErrorText = ""
                        });
                    }


                    return(new Response {
                        ReturnCode = 110, ErrorText = "Данный тип запроса не поддерживается.", ViewErrorText = "Данный тип запроса не поддерживается."
                    });

                default:
                    return(new Response {
                        ReturnCode = 100, ErrorText = "Данный тип запроса не поддерживается.", ViewErrorText = "Данный тип запроса не поддерживается."
                    });
                }
            }


            return(new Response {
                ReturnCode = 120, ErrorText = "Данный запрос не поддерживается.", ViewErrorText = "Данный запрос не поддерживается."
            });
        }
예제 #4
0
 public ParcerNewTrasferEventArgs(Request req, ContactResponse response, ContactTransfer transfer)
 {
     Req      = req;
     Response = response;
     Transfer = transfer;
 }
예제 #5
0
        public Response OnNewData(string data)
        {
            var reader = new XmlTextReader(new MemoryStream(Encoding.Default.GetBytes(data)));

            if (reader.Read()) {

                var xmldoc = new XmlDocument();
                xmldoc.LoadXml(data);

                switch (reader.Name.ToUpper())
                {
                    case "REQUEST":
                        Console.WriteLine("Пришел REQUEST");
                        var request = GetRequest(data);

                        if (request.OBJECT_CLASS == "TMoneyOrderObject")
                        {

                            var nodeList = xmldoc.SelectNodes("REQUEST");

                            if (nodeList != null && nodeList.Count == 1)
                            {
                                var transfer = new ContactTransfer
                                                   {
                                                       Direction =
                                                           request.ACTION.Contains("Outgoing")
                                                               ? ContactTransferDirection.Outgoing
                                                               : ContactTransferDirection.Incoming
                                                   };

                                FillTransfer(transfer, nodeList[0]);
                                Requests.Add(request.REQUEST_ID, transfer);

                                OnNewTransfer(new ParcerNewTrasferEventArgs(request, null, transfer));
                                return new Response { ReturnCode = 0, ErrorText = "", ViewErrorText = "" };
                            }
                        }
                        break;

                    case "RESPONSE":
                        Console.WriteLine("Пришел RESPONSE");

                        var response = GetResponse(xmldoc);

                        if (response.RE == 0)
                    {
                        var xml = new XmlDocument();
                        xml.LoadXml(data);

                        var nodeList = xml.SelectNodes("RESPONSE/TRN_DATA/RESPONSE");

                        if (nodeList != null && nodeList.Count == 1)
                        {
                            var xmlRecord = nodeList[0];
                            var responseTransfer = GetResponse(xmlRecord, false);

                            if (!Requests.ContainsKey(response.REQUEST_ID))
                                return new Response { ReturnCode = 60, ErrorText = "Пришел ответ, но запроса нет в Базе. Код: 60", ViewErrorText = "Пришел ответ, но запроса нет в Базе. Код: 60" };

                            var transfer = Requests[response.REQUEST_ID];
                            // Обновить данные из заголовка
                            transfer.Status = (ContactTransferStatus)responseTransfer.STATE;
                            FillTransfer(transfer, xmlRecord);
                            OnNewTransfer(new ParcerNewTrasferEventArgs(null, responseTransfer, transfer));
                        }

                        return new Response { ReturnCode = 0, ErrorText = "", ViewErrorText = "" };
                    }

                        return new Response { ReturnCode = 110, ErrorText = "Данный тип запроса не поддерживается.", ViewErrorText = "Данный тип запроса не поддерживается." };
                    default:
                        return new Response { ReturnCode = 100, ErrorText = "Данный тип запроса не поддерживается.", ViewErrorText = "Данный тип запроса не поддерживается." };
                }
            }

            return new Response { ReturnCode = 120, ErrorText = "Данный запрос не поддерживается.", ViewErrorText = "Данный запрос не поддерживается." };
        }
예제 #6
0
 public ParcerNewTrasferEventArgs(Request req, ContactResponse response, ContactTransfer transfer)
 {
     Req = req;
     Response = response;
     Transfer = transfer;
 }
예제 #7
0
 /// <summary>
 /// Процедура заполнения беревода без открытия счета
 /// </summary>
 /// <param name="transfer">Перевод</param>
 /// <param name="xmlRecord">XML запрос</param>
 private void FillTransfer(ContactTransfer transfer, XmlNode xmlRecord)
 {
     FillSection("trn", ref transfer, xmlRecord);
     FillSectionFees("trn", ref transfer.Fee, xmlRecord);
     FillSectionPerson("s", ref transfer.Sender, xmlRecord);
     FillSectionAddress("s", ref transfer.Sender.Address, xmlRecord);
     FillSectionIds("s", ref transfer.Sender.Id, xmlRecord);
     FillSectionPerson("b", ref transfer.Resiver, xmlRecord);
     FillSectionAddress("b", ref transfer.Resiver.Address, xmlRecord);
     FillSectionIds("b", ref transfer.Resiver.Id, xmlRecord);
     FillSectionPoint("PICKUP_POINT_INFO", ref transfer.Pickup, xmlRecord);
 }
예제 #8
0
 private void FillSection(string code, ref ContactTransfer transfer, XmlNode requestXml)
 {
     foreach (var property in transfer.GetType().GetFields())
         foreach (var childNode in
             requestXml.ChildNodes.Cast<XmlNode>().Where(childNode => childNode.Name == (code + property.Name) && childNode.ChildNodes.Count > 0))
                 SetValueForProperty(property, transfer, childNode.ChildNodes[0].Value);
 }