Пример #1
0
        public IResponseBase ProcessResponse(IResultResponse response, IRequestParameter parameters)
        {
            var result = new Response <BoolResponse>();

            try
            {
                if (response.Template.TemplateName.Equals(Config.TemplateEnum.AccountDashboard))
                {
                    result.resultset.Model = true;

                    var session = new PaylessSession(_core);

                    var checkout = session.GetCheckout();
                    checkout.IsLoggedIn = true;

                    session.SetCheckout(checkout);
                }
                else
                {
                    // simply parse errors
                    response.Template.Service.Process(response, parameters, _errors);
                }
            }
            catch (Exception ex)
            {
                _errors.Add(ex.Handle("Login.ProcessResponse", ErrorSeverity.FollowUp, ErrorType.Parsing));
            }

            return(result);
        }
Пример #2
0
        public ICommunicationRequest BuildUrl(CheckoutUserRequest parameters)
        {
            try
            {
                var session = new PaylessSession(_core);

                var checkout = session.GetCheckout();

                var request = (CheckoutUserRequest)parameters;
                var url     = string.Format("{0}{1}{2}", Config.Urls.SecureBaseUrl, Config.Urls.CheckoutUser, checkout.Cart.DWQuery);
                var postSb  = new StringBuilder();

                postSb.AppendFormat("{0}={1}", checkout.Cart.DWLoginParam, HttpUtility.UrlEncode(request.Email));
                postSb.AppendFormat("&dwfrm_login_password={0}", HttpUtility.UrlEncode(request.Password));
                postSb.Append("&dwfrm_login_login=Login");
                postSb.AppendFormat("&dwfrm_login_securekey={0}", checkout.DWSecureKey);

                if (request.IsRememberMe)
                {
                    postSb.Append("&dwfrm_login_rememberme=true");
                }

                _core.CommunicationRequest = new ExtendedComRequest(HttpRequestMethod.POST, url, _core, _errors)
                {
                    OverridePostData = postSb.ToString()
                };
            }
            catch (Exception ex)
            {
                _errors.Add(ex.Handle("CheckoutUser.BuildUrl", ErrorSeverity.FollowUp, ErrorType.BuildUrl));
            }

            return(_core.CommunicationRequest);
        }
Пример #3
0
        public ICommunicationRequest BuildUrl(IRequestParameter parameters)
        {
            try
            {
                var request = (CheckoutPayPalSuccessRequest)parameters;

                var session = new PaylessSession(_core);

                var cart = session.GetCheckout();

                var url = new StringBuilder();

                url.Append(Config.Urls.SecureBaseUrl);
                url.Append(Config.Urls.CheckoutPayPalSuccess);

                url.AppendFormat("?dwcont={0}", request.DWControl);
                url.AppendFormat("&token={0}", request.Token);
                url.AppendFormat("&PayerID={0}", request.PayerId);

                _core.CommunicationRequest = new ExtendedComRequest(HttpRequestMethod.GET, url.ToString(), _core, _errors);
            }
            catch (Exception ex)
            {
                _errors.Add(ex.Handle("CheckoutPayPalSuccess.BuildUrl", ErrorSeverity.FollowUp, ErrorType.BuildUrl));
            }

            return(_core.CommunicationRequest);
        }
        public IResponseBase ProcessResponse(IResultResponse response, IRequestParameter parameters)
        {
            var result = new Response <CheckoutResponse>();

            result.resultset = _request.CheckoutResponse;

            try
            {
                //check data first for valid json
                if (!response.RawData.Contains("<"))
                {
                    var dto        = JsonConvert.DeserializeObject <SavedCardDTO>(response.RawData);
                    var cardInfo   = result.resultset.PaymentInfo.CardInfo;
                    var savedCards = result.resultset.SavedCards;

                    cardInfo.Id              = dto.MaskedNumber;
                    cardInfo.Type            = dto.Type;
                    cardInfo.NameOnCard      = dto.Holder;
                    cardInfo.Number          = dto.MaskedFourDigit;
                    cardInfo.ExpirationMonth = dto.ExpirationMonth;
                    cardInfo.ExpirationYear  = dto.ExpirationYear;
                    cardInfo.Cvv             = string.Empty;

                    savedCards.ForEach(card => card.IsSelected = card.Value == _request.CardId);

                    if (!_errors.Any())
                    {
                        var session = new PaylessSession(_core);

                        session.SetCheckout(result.resultset);
                    }
                }
                else
                {
                    //this call returns the home page when you call it after the session has timed out
                    //this solution sucks, but works for now.

                    //tell the front end to time out
                    _errors.Add(new SiteError()
                    {
                        Source = "SessionTimeout"
                    });
                }
            }
            catch (Exception ex)
            {
                _errors.Add(ex.Handle("CheckoutUpdateCreditCardInfo.ProcessResponse", ErrorSeverity.FollowUp, ErrorType.BuildUrl));
            }

            return(result);
        }
Пример #5
0
 private void GetCheckout()
 {
     try
     {
         var session  = new PaylessSession(_core);
         var checkout = session.GetCheckout();
         if (checkout == null)
         {
             return;
         }
         _result.resultset.IsLoggedIn       = checkout.IsLoggedIn;
         _result.resultset.CartItemCount    = checkout.Cart.CartItemCount;
         _result.resultset.CartTotalAmount  = checkout.Cart.Summary.Total.Value;
         _result.resultset.CriteoCustomerId = checkout.Cart.CriteoCustomerId;
         _result.resultset.PromoHeader      = checkout.Cart.PromoHeader;
     }
     catch (Exception ex)
     {
         _result.errors.Add(ex.Handle("Init.GetCheckout: " + ex, ErrorSeverity.FollowUp, ErrorType.RequestError));
     }
 }
Пример #6
0
        public ICommunicationRequest BuildUrl(IRequestParameter parameters)
        {
            try
            {
                var request = (CheckoutPayPalCancelRequest)parameters;

                var session = new PaylessSession(_core);

                var checkout = session.GetCheckout();

                var url = string.Format("{0}{1}?token={2}",
                                        Config.Urls.SecureBaseUrl, checkout.PayPalInfo.IsBillingInfoStep ? Config.Urls.CheckoutPayPalCancelBilling : Config.Urls.CheckoutPayPalCancelCart,
                                        request.Token);

                _core.CommunicationRequest = new ExtendedComRequest(HttpRequestMethod.GET, url, _core, _errors);
            }
            catch (Exception ex)
            {
                _errors.Add(ex.Handle("CheckoutPayPalCancel.BuildUrl", ErrorSeverity.FollowUp, ErrorType.BuildUrl));
            }

            return(_core.CommunicationRequest);
        }
Пример #7
0
        public ICommunicationRequest BuildUrl(IRequestParameter parameters)
        {
            try
            {
                var url    = string.Format("{0}{1}{2}", Config.Urls.SecureBaseUrl, Config.Urls.ResetPassword, _request.DWQuery);
                var postSb = new StringBuilder();
                postSb.AppendFormat("dwfrm_resetpassword_password={0}", HttpUtility.UrlEncode(_request.Password));
                postSb.AppendFormat("&dwfrm_resetpassword_passwordconfirm={0}", HttpUtility.UrlEncode(_request.ConfirmPassword));
                postSb.Append("&dwfrm_resetpassword_send=Apply");
                if (_session == null)
                {
                    _session = new PaylessSession(_core);
                }
                var checkout = _session.GetCheckout();
                if (checkout != null)
                {
                    if (!string.IsNullOrEmpty(checkout.CsrfToken))
                    {
                        postSb.AppendFormat("&csrf_token={0}", checkout.CsrfToken);
                    }
                }
                postSb.AppendFormat("&Token={0}", _request.Token);

                _core.CommunicationRequest = new ExtendedComRequest(HttpRequestMethod.POST, url, _core, _errors)
                {
                    OverridePostData    = postSb.ToString(),
                    OverrideGetTemplate = true
                };
            }
            catch (Exception ex)
            {
                _errors.Add(ex.Handle("ResetPassword.BuildUrl", ErrorSeverity.FollowUp, ErrorType.BuildUrl));
            }

            return(_core.CommunicationRequest);
        }
Пример #8
0
 public ForgotPasswordForm(ICore core, List <SiteError> errors)
 {
     _errors  = errors;
     _core    = core;
     _session = new PaylessSession(core);
 }
Пример #9
0
        public ICommunicationRequest BuildUrl(CheckoutShippingRequest request)
        {
            try
            {
                if (request.CheckoutResponse != null)
                {
                    var checkout = request.CheckoutResponse;

                    if (_session == null)
                    {
                        _session = new PaylessSession(_core);
                    }

                    if (!string.IsNullOrEmpty(checkout.LoyaltyEmail))
                    {
                        checkout.Email = checkout.LoyaltyEmail;
                    }

                    _session.SetCheckout(checkout);

                    var shippingInfo           = checkout.ShippingInfo;
                    var selectedShippingOption = checkout.ShippingOptions.Options.Where(x => x.IsSelected).FirstOrDefault() ?? new ShippingOption();
                    var selectedSavedAddress   = checkout.SavedAddresses.Where(x => x.IsSelected).FirstOrDefault() ?? new SavedAddressOption();
                    var isShipToStore          = checkout.ShippingOptions.SelectedOption == Config.Constants.ShipToStore;
                    var shipToStoreId          = checkout.ShippingOptions.ShipToStoreId;

                    var url = string.Format("{0}{1}{2}&csrf_token={3}", Config.Urls.SecureBaseUrl, Config.Urls.CheckoutShippingPost, checkout.Cart.DWQuery, checkout.CsrfToken);
                    //cperez:rollback due to gift-card issues.
                    //var url = string.Format("{0}{1}/{2}", Config.Urls.SecureBaseUrl, Config.Urls.CheckoutShippingPost, checkout.Cart.DWQuery.Replace("?dwcont=",""));

                    var postSb = new StringBuilder();

                    postSb.AppendFormat("dwfrm_singleshipping_shippingAddress_shipToStore={0}", isShipToStore ? "true" : "false");
                    if (checkout.IsLoggedIn)
                    {
                        postSb.AppendFormat("&dwfrm_singleshipping_addressList={0}", HttpUtility.UrlEncode(selectedSavedAddress.Value));
                    }
                    postSb.AppendFormat("&dwfrm_singleshipping_shippingAddress_addressFields_firstName={0}", HttpUtility.UrlEncode(shippingInfo.FirstName));
                    postSb.AppendFormat("&dwfrm_singleshipping_shippingAddress_addressFields_lastName={0}", HttpUtility.UrlEncode(shippingInfo.LastName));
                    postSb.AppendFormat("&dwfrm_singleshipping_shippingAddress_addressFields_address1={0}", HttpUtility.UrlEncode(shippingInfo.Address1));
                    postSb.AppendFormat("&dwfrm_singleshipping_shippingAddress_addressFields_address2={0}", HttpUtility.UrlEncode(shippingInfo.Address2));
                    postSb.AppendFormat("&dwfrm_singleshipping_shippingAddress_addressFields_country={0}", "US");
                    postSb.AppendFormat("&dwfrm_singleshipping_shippingAddress_addressFields_city={0}", HttpUtility.UrlEncode(shippingInfo.City));
                    postSb.AppendFormat("&dwfrm_singleshipping_shippingAddress_addressFields_states_state={0}", shippingInfo.State);
                    postSb.AppendFormat("&dwfrm_singleshipping_shippingAddress_addressFields_zip={0}", shippingInfo.Zip);
                    postSb.AppendFormat("&dwfrm_singleshipping_shippingAddress_addressFields_phone={0}", shippingInfo.Phone);
                    if (checkout.IsAddToAddressBook)
                    {
                        postSb.Append("&dwfrm_singleshipping_shippingAddress_addToAddressBook=true");
                    }
                    if (checkout.PaymentInfo.BillingSameAsShipping)
                    {
                        postSb.Append("&dwfrm_singleshipping_shippingAddress_useAsBillingAddress=true");
                    }
                    postSb.AppendFormat("&dwfrm_singleshipping_shippingAddress_loyaltyEmailAddress={0}", HttpUtility.UrlEncode(checkout.LoyaltyEmail));
                    postSb.AppendFormat("&dwfrm_singleshipping_shippingAddress_shippingMethodID={0}", selectedShippingOption.Value);
                    postSb.AppendFormat("&dwfrm_singleshipping_securekey={0}", checkout.DWSecureKey);
                    postSb.AppendFormat("&{0}=Next%3A+Enter+Billing+Info", isShipToStore ? "dwfrm_singleshipping_shipToStore_shipToStoreSave" : "dwfrm_singleshipping_shippingAddress_save");
                    postSb.AppendFormat("&address={0}", checkout.ShippingOptions.ShipToStoreZip);
                    postSb.AppendFormat("&distance={0}", 100);
                    if (isShipToStore)
                    {
                        postSb.AppendFormat("&shipToStoreSelection={0}", shipToStoreId);
                    }
                    postSb.AppendFormat("&dwfrm_singleshipping_shipToStore_storeID={0}", string.IsNullOrEmpty(shipToStoreId) ? "null" : shipToStoreId);
                    postSb.Append("&dwfrm_singleshipping_shipToStore_searchAddress=");
                    postSb.AppendFormat("&EnvironmentID={0}", EnvironmentHelper.GetEnvironmentId(_core.Context.Request));

                    _core.CommunicationRequest = new ExtendedComRequest(HttpRequestMethod.POST, url, _core, _errors)
                    {
                        OverridePostData = postSb.ToString()
                    };
                }
                else
                {
                    var url = string.Format("{0}{1}", Config.Urls.SecureBaseUrl, Config.Urls.CheckoutShippingGet);
                    _core.CommunicationRequest = new ExtendedComRequest(HttpRequestMethod.GET, url, _core, _errors);
                }
            }
            catch (Exception ex)
            {
                _errors.Add(ex.Handle("CheckoutShipping.BuildUrl", ErrorSeverity.FollowUp, ErrorType.BuildUrl));
            }

            return(_core.CommunicationRequest);
        }
Пример #10
0
 public CheckoutShipping(ICore core)
     : this()
 {
     _core    = core;
     _session = new PaylessSession(_core);
 }
Пример #11
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);
        }
Пример #12
0
 public ExtendedComRequest(HttpRequestMethod requestType, string url, ICore core, List <SiteError> errors) : base(requestType, url, core, errors)
 {
     _session = new PaylessSession(core);
 }
Пример #13
0
 public CartService(ICore core)
 {
     _core    = core;
     _session = new PaylessSession(core);
 }
Пример #14
0
        public IResponseBase ParseCart(IResultResponse response, IRequestParameter parameters)
        {
            Response <CartResponse> result = new Response <CartResponse>();

            try
            {
                // Check If Cart Is Empty
                var emptyCartCheck = _xDoc.Descendants(_ns + "div")
                                     .WhereAttributeEquals("class", "cart-empty")
                                     .Any();

                if (!emptyCartCheck)
                {
                    var mainContainer = _xDoc.Descendants(_ns + "form")
                                        .WhereAttributeEquals("id", "cart-items-form")
                                        .FirstOrNewXElement();

                    // Get Cart Items
                    var itemsContainer = mainContainer.Descendants(_ns + "tr")
                                         .WhereAttributeEquals("class", "cart-row");

                    var items = ParseCartItems(itemsContainer);

                    //cperez:SPAY-43: MasterID is the LOT + Size. This is the equivalent to SKU
                    if (items != null && items.Any())
                    {
                        foreach (var cartItem in items)
                        {
                            cartItem.MasterProductId = cartItem.Sku;
                        }
                    }

                    // Get Price Summary
                    var summaryContainer = mainContainer.Descendants(_ns + "table")
                                           .WhereAttributeEquals("class", "order-totals-table")
                                           .FirstOrNewXElement();

                    var summary = ParseCartSummary(summaryContainer);

                    // Get Coupons
                    var couponsContainer = mainContainer.Descendants(_ns + "tr")
                                           .WhereAttributeEquals("class", "rowcoupons");

                    var coupons = ParseCartCoupons(couponsContainer);

                    // Get Promo Message
                    var promoMessage = mainContainer.Descendants(_ns + "div")
                                       .WhereAttributeEquals("class", "cart-promo")
                                       .FirstOrNewXElement()
                                       .ElementValue();

                    // Get DWQuery
                    var action  = mainContainer.AttributeValue("action");
                    var begin   = action.IndexOf("?dwcont=");
                    var dwQuery = string.Empty;

                    if (begin > -1)
                    {
                        dwQuery = action.Substring(begin, action.Length - begin);
                    }

                    var csrfToken = ParsingHelper.GetPasswordReset_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);
                    }

                    // Get Login Parameter Name
                    var dwLoginParam = _xDoc.Descendants(_ns + "form")
                                       .WhereAttributeEquals("id", "dwfrm_login")
                                       .Descendants(_ns + "input")
                                       .WhereAttributeContains("id", "dwfrm_login_username_")
                                       .FirstOrNewXElement()
                                       .AttributeValue("id");

                    // Get Errors
                    _errors.AddRange(ParseCartErrors(mainContainer));

                    // Allow to Checkout
                    var allowToCheckout = !_xDoc.Descendants(_ns + "button")
                                          .WhereAttributeEquals("name", "dwfrm_cart_checkoutCart")
                                          .WhereAttributeEquals("disabled", "disabled")
                                          .Any();

                    // Total Cart Item Count
                    var itemCount = 0;
                    items.ForEach(x => itemCount += x.Quantity);



                    // Populate Result
                    result.resultset.Cart.CartItems        = items;
                    result.resultset.Cart.Summary          = summary;
                    result.resultset.Cart.Coupons          = coupons;
                    result.resultset.Cart.PromoMessage     = promoMessage;
                    result.resultset.Cart.DWQuery          = dwQuery;
                    result.resultset.Cart.DWLoginParam     = dwLoginParam;
                    result.resultset.Cart.AllowToCheckout  = allowToCheckout;
                    result.resultset.Cart.CartItemCount    = itemCount;
                    result.resultset.Cart.GoogleWalletInfo = ParsingHelper.GetCartGoogleWalletInfoFrom(response, result.resultset.Cart);
                }


                // Criteo Customer Id
                var criteoCustomerId = ParsingHelper.GetCriteoCustomerId(response);
                result.resultset.Cart.CriteoCustomerId = criteoCustomerId;

                // Get Promo Header
                var promoHeaderContainer = _xDoc.Descendants(_ns + "div")
                                           .WhereAttributeEquals("class", "header-banner")
                                           .FirstOrNewXElement();

                promoHeaderContainer.Descendants(_ns + "script")
                .Remove();

                var promoHeader = string.Empty;
                if (Config.CartServicesParams.IsVisiblePromoHeader)
                {
                    promoHeader = promoHeaderContainer.ElementValue();
                }

                result.resultset.Cart.PromoHeader    = promoHeader;
                result.resultset.TealiumDataBase     = ParsingHelper.GetTealiumDataBase(_xDoc);
                result.resultset.TealiumDataExtended = ParsingHelper.GetTealiumDataExtended(_xDoc);
            }
            catch (Exception ex)
            {
                _errors.Add(ex.Handle(
                                "MadServ.CartService.ParseCart",
                                ErrorSeverity.FollowUp,
                                ErrorType.Parsing
                                ));
            }


            return(result);
        }
Пример #15
0
 public ForgotPasswordForm(ICore core)
 {
     _core    = core;
     _errors  = new List <SiteError>();
     _session = new PaylessSession(core);
 }
Пример #16
0
 public ExtendedComRequest(ICore core, List <SiteError> errors) : base(core, errors)
 {
     _session = new PaylessSession(core);
     //var checkout = (new PaylessSession(core)).GetCheckout();
     //cartId = checkout.Cart.DWQuery;
 }
Пример #17
0
 public ResetPassword(ICore core)
 {
     _core    = core;
     _errors  = new List <SiteError>();
     _session = new PaylessSession(core);
 }