Beispiel #1
0
        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();
        }
Beispiel #2
0
        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;
 }
Beispiel #6
0
        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;
                }
            }
        }