internal Errors(XmlTextReader xmlReader) { bool list = false; var validationErrors = new List <Error>(); while (xmlReader.Read()) { if ((xmlReader.Name == "errors" || xmlReader.Name == "error") && xmlReader.NodeType == XmlNodeType.EndElement) { break; } if (xmlReader.Name == "errors" && xmlReader.NodeType == XmlNodeType.Element) { list = true; } if (xmlReader.Name == "error" && xmlReader.NodeType == XmlNodeType.Element) { validationErrors.Add(new Error(xmlReader, list)); } if (xmlReader.Name == "transaction_error" && xmlReader.NodeType == XmlNodeType.Element) { TransactionError = new TransactionError(xmlReader); } } ValidationErrors = validationErrors.ToArray(); }
internal static async Task <TransactionError> ReadFromXmlAsync(XmlReader reader) { var transactionError = new TransactionError(); while (await reader.ReadAsync().ConfigureAwait(false)) { if (reader.Name == "transaction_error" && reader.NodeType == XmlNodeType.EndElement) { break; } switch (reader.Name) { case "error_code": transactionError.ErrorCode = await reader.ReadElementContentAsStringAsync().ConfigureAwait(false); break; case "error_category": transactionError.ErrorCategory = await reader.ReadElementContentAsStringAsync().ConfigureAwait(false); break; case "customer_message": transactionError.CustomerMessage = await reader.ReadElementContentAsStringAsync().ConfigureAwait(false); break; case "merchant_advice": transactionError.MerchantAdvice = await reader.ReadElementContentAsStringAsync().ConfigureAwait(false); break; case "gateway_error_code": transactionError.GatewayErrorCode = await reader.ReadElementContentAsStringAsync().ConfigureAwait(false); break; } } return(transactionError); }
internal static TransactionError ReadResponseAndParseError(HttpWebResponse response) { if (response == null) { return(null); } using (var responseStream = response.GetResponseStream()) { TransactionError error = null; try { using (var xmlReader = Client.BuildXmlTextReader(responseStream)) { while (xmlReader.Read()) { if (xmlReader.Name == "transaction_error" && xmlReader.NodeType == XmlNodeType.Element) { error = new TransactionError(xmlReader); } if (xmlReader.Name == "transaction_error" && xmlReader.NodeType == XmlNodeType.EndElement) { break; } } } } catch (XmlException) { // Do nothing } return(error); } }
internal RecurlyException(string message, Errors errors) : base(message) { Errors = errors.ValidationErrors; TransactionError = errors.TransactionError; }
internal RecurlyException(Errors errors) { Errors = errors.ValidationErrors; TransactionError = errors.TransactionError; }
internal override void ReadXml(XmlTextReader reader) { while (reader.Read()) { // End of account element, get out of here if ((reader.Name == "transaction") && reader.NodeType == XmlNodeType.EndElement) { break; } if (reader.NodeType != XmlNodeType.Element) { continue; } string href; int amount; switch (reader.Name) { case "account": href = reader.GetAttribute("href"); if (null != href) { AccountCode = Uri.UnescapeDataString(href.Substring(href.LastIndexOf("/") + 1)); } else { Account = new Account(reader); } break; case "invoice": href = reader.GetAttribute("href"); if (null != href) { string invoiceNumber = href.Substring(href.LastIndexOf("/") + 1); MatchCollection matches = Regex.Matches(invoiceNumber, "([^\\d]{2})(\\d+)"); if (matches.Count == 1) { InvoicePrefix = matches[0].Groups[1].Value; Invoice = int.Parse(matches[0].Groups[2].Value); } else { Invoice = int.Parse(invoiceNumber); } } break; case "uuid": Uuid = reader.ReadElementContentAsString(); break; case "action": Action = reader.ReadElementContentAsString().ParseAsEnum <TransactionType>(); break; case "amount_in_cents": if (Int32.TryParse(reader.ReadElementContentAsString(), out amount)) { AmountInCents = amount; } break; case "tax_in_cents": if (Int32.TryParse(reader.ReadElementContentAsString(), out amount)) { TaxInCents = amount; } break; case "currency": Currency = reader.ReadElementContentAsString(); break; case "description": Description = reader.ReadElementContentAsString(); break; case "payment_method": PaymentMethod = reader.ReadElementContentAsString(); break; case "status": var state = reader.ReadElementContentAsString(); Status = "void" == state ? TransactionState.Voided : state.ParseAsEnum <TransactionState>(); break; case "reference": Reference = reader.ReadElementContentAsString(); break; case "test": Test = reader.ReadElementContentAsBoolean(); break; case "voidable": Voidable = reader.ReadElementContentAsBoolean(); break; case "refundable": Refundable = reader.ReadElementContentAsBoolean(); break; case "ip_address": IpAddress = reader.ReadElementContentAsString(); break; case "ccv_result": CCVResult = reader.ReadElementContentAsString(); break; case "avs_result": AvsResult = reader.ReadElementContentAsString(); break; case "avs_result_street": AvsResultStreet = reader.ReadElementContentAsString(); break; case "avs_result_postal": AvsResultPostal = reader.ReadElementContentAsString(); break; case "created_at": CreatedAt = reader.ReadElementContentAsDateTime(); break; case "updated_at": UpdatedAt = reader.ReadElementContentAsDateTime(); break; case "details": // API docs say not to load details into objects break; case "gateway_type": GatewayType = reader.ReadElementContentAsString(); break; case "origin": Origin = reader.ReadElementContentAsString(); break; case "message": Message = reader.ReadElementContentAsString(); break; case "approval_code": ApprovalCode = reader.ReadElementContentAsString(); break; case "collected_at": DateTime d; if (DateTime.TryParse(reader.ReadElementContentAsString(), out d)) { CollectedAt = d; } break; case "transaction_error": Error = new TransactionError(reader); break; } } }