Exemple #1
0
        public override Template GetTemplate(IResultResponse response)
        {
            var template = new Template
            {
                TemplateName = Config.TemplateEnum.GeneralError
            };

            try
            {
                if (this.OverrideBlockXDocumentConversion) // JSON
                {
                    if (this.OverrideStopAutoRedirects)
                    {
                        if (response.ResponseHeaders != null)
                        {
                            var location = string.Empty;
                            if (response.ResponseHeaders.TryGetValue("Location", out location) && location.Contains(".paypal."))
                            {
                                var service = new CheckoutService(Core);
                                template = new Template
                                {
                                    TemplateName = Config.TemplateEnum.PayPalRedirect,
                                    Service      = service,
                                    Method       = service.ParsePayPalRedirect
                                };
                            }
                            if (string.IsNullOrWhiteSpace(location))
                            {
                                if (response.RawData.Contains(".paypal."))
                                {
                                    var startIndex = response.RawData.IndexOf("url=");
                                    var endIndex   = response.RawData.IndexOf("><meta http-equiv=\"Robots\"");
                                    location = response.RawData.Substring(startIndex, endIndex - startIndex).Replace("url=", "").Replace("\"", "").Trim();
                                    var service = new CheckoutService(Core);
                                    template = new Template
                                    {
                                        TemplateName = Config.TemplateEnum.PayPalRedirect,
                                        Service      = service,
                                        Method       = service.ParsePayPalRedirect
                                    };
                                }
                            }
                        }
                    }
                }
                else if (response.XDocument != null) // HTML and XML
                {
                    var xDoc = response.XDocument;
                    _ns = xDoc.Root.GetDefaultNamespace();

                    // Regular HTML Pages
                    var title = xDoc.Descendants(_ns + "title")
                                .FirstOrNewXElement()
                                .ElementValue();

                    if (title.IndexOf("****", StringComparison.InvariantCultureIgnoreCase) > -1 ||
                        string.IsNullOrEmpty(title))
                    {
                        if (xDoc.Descendants(_ns + "span")
                            .FirstOrNewXElement()
                            .AttributeValue("class")
                            .Equals("shopping-bag"))
                        {
                            var service = new CartService(Core);
                            template = new Template
                            {
                                TemplateName = Config.TemplateEnum.CartMini,
                                Service      = service,
                                Method       = service.ParseCartMini
                            };
                        }
                        else if (xDoc.Descendants(_ns + "legend")
                                 .FirstOrNewXElement()
                                 .ElementValue()
                                 .IndexOf("Select Shipping Method", StringComparison.InvariantCultureIgnoreCase) > -1)
                        {
                            var service = new CheckoutService(Core);
                            template = new Template
                            {
                                TemplateName = Config.TemplateEnum.CheckoutShipping,
                                Service      = service,
                                Method       = service.ParseShippingOptions
                            };
                        }
                        else if (xDoc.ToString().IndexOf("shoebox", StringComparison.InvariantCultureIgnoreCase) > -1)
                        {
                            var service = new HomeService(Core);
                            template = new Template
                            {
                                TemplateName = Config.TemplateEnum.FindMyPerfectShoe,
                                Service      = service,
                                Method       = service.ParseFindMyPerfectShoe
                            };
                        }
                    }
                    else if (title.IndexOf("My Payless Bag", StringComparison.InvariantCultureIgnoreCase) > -1)
                    {
                        var service = new CartService(Core);
                        template = new Template
                        {
                            TemplateName = Config.TemplateEnum.CartDetail,
                            Service      = service,
                            Method       = service.ParseCart
                        };
                    }
                    else if (title.IndexOf("Account Login", StringComparison.InvariantCultureIgnoreCase) > -1)
                    {
                        var header = ParsingHelper.GetTemplateHeader(xDoc, _ns);

                        if (header.IndexOf("Account Login", StringComparison.InvariantCultureIgnoreCase) > -1)
                        {
                            var service = new AccountService(Core);
                            template = new Template
                            {
                                TemplateName = Config.TemplateEnum.Login,
                                Service      = service,
                                Method       = service.ParseLogin
                            };
                        }
                        else
                        {
                            var service = new CheckoutService(Core);
                            template = new Template
                            {
                                TemplateName = Config.TemplateEnum.CheckoutBegin,
                                Service      = service,
                                Method       = service.ParseCheckoutBegin
                            };
                        }
                    }
                    else if (title.IndexOf("My Order History", StringComparison.InvariantCultureIgnoreCase) > -1)
                    {
                        var service = new AccountService(Core);
                        template = new Template
                        {
                            TemplateName = Config.TemplateEnum.OrderHistory,
                            Service      = service,
                            Method       = service.ParseAccountOrderHistory
                        };
                    }
                    else if (title.IndexOf("Sites-payless-Site", StringComparison.InvariantCultureIgnoreCase) > -1)
                    {
                        var service = new AccountService(Core);
                        template = new Template
                        {
                            TemplateName = Config.TemplateEnum.OrderDetail,
                            Service      = service,
                            Method       = service.ParseAccountOrderDetail
                        };
                    }
                    else if (title.IndexOf("My Account", StringComparison.InvariantCultureIgnoreCase) > -1)
                    {
                        template = new Template
                        {
                            TemplateName = Config.TemplateEnum.AccountDashboard
                        };
                    }
                    else if (title.IndexOf("Checkout", StringComparison.InvariantCultureIgnoreCase) > -1)
                    {
                        var checkoutService = new CheckoutService(Core);
                        var step            = xDoc.Descendants(_ns + "div")
                                              .WhereAttributeContains("class", "step-")
                                              .WhereAttributeContains("class", " active")
                                              .FirstOrNewXElement()
                                              .ElementValue();

                        var breadCrumb = xDoc.Descendants(_ns + "div")
                                         .WhereAttributeEquals("class", "breadcrumb")
                                         .FirstOrNewXElement()
                                         .ElementValue();


                        var csrfToken = ParsingHelper.GetCheckout_CsrfToken(xDoc);
                        if (!string.IsNullOrEmpty(csrfToken))
                        {
                            var strCsrfToken = csrfToken.Split('=').GetValue(1).ToString();
                            if (_session == null)
                            {
                                _session = new PaylessSession(Core);
                            }
                            var checkout = _session.GetCheckout();
                            checkout.CsrfToken = strCsrfToken;
                            _session.SetCheckout(checkout);
                        }

                        if (step.IndexOf("Shipping", StringComparison.InvariantCultureIgnoreCase) > -1)
                        {
                            template = new Template
                            {
                                TemplateName = Config.TemplateEnum.CheckoutShipping,
                                Service      = checkoutService,
                                Method       = checkoutService.ParseShipping
                            };
                        }
                        else if (step.IndexOf("Billing", StringComparison.InvariantCultureIgnoreCase) > -1)
                        {
                            template = new Template
                            {
                                TemplateName = Config.TemplateEnum.CheckoutBilling,
                                Service      = checkoutService,
                                Method       = checkoutService.ParseBilling
                            };
                        }
                        else if (step.IndexOf("Review Order", StringComparison.InvariantCultureIgnoreCase) > -1 ||
                                 (string.IsNullOrEmpty(step) && title.IndexOf("Confirmation", StringComparison.InvariantCultureIgnoreCase) == -1))
                        {
                            template = new Template
                            {
                                TemplateName = Config.TemplateEnum.CheckoutReview,
                                Service      = checkoutService,
                                Method       = checkoutService.ParseReview
                            };
                        }
                        else if (title.IndexOf("Confirmation", StringComparison.InvariantCultureIgnoreCase) > -1)
                        {
                            template = new Template
                            {
                                TemplateName = Config.TemplateEnum.CheckoutConfirmation,
                                Service      = checkoutService,
                                Method       = checkoutService.ParseConfirmation
                            };
                        }
                        else if (breadCrumb.IndexOf("Login", StringComparison.InvariantCultureIgnoreCase) > -1)
                        {
                            template = new Template
                            {
                                TemplateName = Config.TemplateEnum.CheckoutBegin,
                                Service      = checkoutService,
                                Method       = checkoutService.ParseCheckoutBegin
                            };
                        }
                        else if (breadCrumb.IndexOf("My Account", StringComparison.InvariantCultureIgnoreCase) > -1)
                        {
                            var header = ParsingHelper.GetTemplateHeader(xDoc, _ns);

                            if (header.IndexOf("Account Login", StringComparison.InvariantCultureIgnoreCase) > -1)
                            {
                                var service = new AccountService(Core);
                                template = new Template
                                {
                                    TemplateName = Config.TemplateEnum.Login,
                                    Service      = service,
                                    Method       = service.ParseLogin
                                };
                            }
                            else if (header.IndexOf("ORDER SUMMARY", StringComparison.InvariantCultureIgnoreCase) > -1)
                            {
                                var service = new AccountService(Core);
                                template = new Template
                                {
                                    TemplateName = Config.TemplateEnum.OrderDetail,
                                    Service      = service,
                                    Method       = service.ParseAccountOrderDetail
                                };
                            }
                            else if (breadCrumb.IndexOf("Order History", StringComparison.InvariantCultureIgnoreCase) > -1)
                            {
                                var service = new AccountService(Core);
                                template = new Template
                                {
                                    TemplateName = Config.TemplateEnum.OrderDetail,
                                    Service      = service,
                                    Method       = service.ParseAccountOrderDetail
                                };
                            }
                        }
                    }
                    else
                    {
                        var legend = xDoc.Descendants(_ns + "legend")
                                     .FirstOrNewXElement()
                                     .ElementValue();

                        if (legend.IndexOf("Select Shipping Method", StringComparison.InvariantCultureIgnoreCase) > -1)
                        {
                            var service = new CheckoutService(Core);
                            template = new Template
                            {
                                TemplateName = Config.TemplateEnum.CheckoutShipping,
                                Service      = service,
                                Method       = service.ParseShippingOptions
                            };
                        }
                        else if (legend.IndexOf("Order Summary", StringComparison.InvariantCultureIgnoreCase) > -1)
                        {
                            var service = new CheckoutService(Core);
                            template = new Template
                            {
                                TemplateName = Config.TemplateEnum.CheckoutBilling,
                                Service      = service,
                                Method       = service.ParseUpdateSummary
                            };
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Errors.Add(e.Handle("ExtendedComRequest.GetTemplate",
                                    ErrorSeverity.FollowUp,
                                    ErrorType.Parsing));
            }

            return(template);
        }