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); } } }
/// <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); }
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 = "Данный запрос не поддерживается." }); }
public ParcerNewTrasferEventArgs(Request req, ContactResponse response, ContactTransfer transfer) { Req = req; Response = response; Transfer = transfer; }
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 = "Данный запрос не поддерживается." }; }
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); }