コード例 #1
0
        /// <summary>
        ///     Validates the checkout order.
        ///     you may save additional order info into the order, during validations.
        ///     following is a sample which saves the date of birth as additional order info.
        /// </summary>
        /// <remarks>
        ///     The method need to return within 3 seconds to be able to cancel placed an order at Klarna.
        /// </remarks>
        /// <param name="order">The order.</param>
        /// <returns>ValidationResult.</returns>
        public ValidationResult ValidateCheckoutOrder(ILitiumKcoOrder order)
        {
            var kcoOrder = order as LitiumKcoOrder;

            if (!string.IsNullOrEmpty(kcoOrder?.CheckoutOrder?.CheckoutCustomer?.DateOfBirth))
            {
                AddOrUpdateAdditionalOrderInfo(order.OrderCarrier, "DateOfBirth", kcoOrder.CheckoutOrder.CheckoutCustomer.DateOfBirth);
            }

            var channel  = _channelService.Get(order.OrderCarrier.ChannelID);
            var language = channel.WebsiteLanguageSystemId.HasValue ? _languageService.Get(channel.WebsiteLanguageSystemId.Value) : null;

            CultureInfo.CurrentUICulture = language != null ? language.CultureInfo : CultureInfo.CurrentUICulture;
            var routeRequestLookupInfo = new RouteRequestLookupInfo()
            {
                Channel            = channel,
                IsSecureConnection = true,
            };

            _errorPageResolver.TryGet(routeRequestLookupInfo, out var routeRequestInfo);

            // following result is used by Klarna AddOn to send the validation result back to Klarna.
            // ReSharper disable once ConvertToLambdaExpression
            return(new ValidationResult
            {
                IsOrderValid = true,
                RedirectToUrlOnValidationFailure = routeRequestInfo.DataPath,
            });
        }
コード例 #2
0
        public bool TryGet(RouteRequestLookupInfo routeRequestLookupInfo, out string redirectUrl)
        {
            string resultUrl = null;

            if (_pageByFieldType.TryFindPage(page =>
            {
                var url = _urlService.GetUrl(page, new PageUrlArgs(routeRequestLookupInfo.Channel.SystemId));
                if (url == null)
                {
                    return(false);
                }
                resultUrl = string.Concat(url, url.Contains("?") ? "&" : "?", "RedirectUrl=", HttpUtility.UrlEncode(routeRequestLookupInfo.RawUrl));
                var statusCode = HttpContext.Current?.Response.StatusCode;
                if (Thread.CurrentPrincipal.Identity.IsAuthenticated || statusCode == (int)HttpStatusCode.Unauthorized)
                {
                    resultUrl += $"&code={statusCode}";
                }
                return(true);
            }))
            {
                redirectUrl = resultUrl;
                return(true);
            }

            return(_parentResolver.TryGet(routeRequestLookupInfo, out redirectUrl));
        }
コード例 #3
0
        /// <summary>
        ///     Validates the checkout order.
        ///     you may save additional order info into the order, during validations.
        ///     following is a sample which saves the date of birth as additional order info.
        /// </summary>
        /// <remarks>
        ///     The method need to return within 3 seconds to be able to cancel placed an order at Klarna.
        /// </remarks>
        /// <param name="order">The order.</param>
        /// <returns>ValidationResult.</returns>
        public ValidationResult ValidateCheckoutOrder(ILitiumKcoOrder order)
        {
            //var order = kcoOrder as CheckoutOrder;
            //var customer = order.OrderDetailsRaw["customer"] as JObject;
            //if (customer != null)
            //{
            //    var dateOfBirth = customer["date_of_birth"];
            //    if (dateOfBirth != null)
            //    {
            //        AddOrUpdateAdditionalOrderInfo(order.OrderCarrier, "DateOfBirth", (string)dateOfBirth);
            //    }
            //}

            var channel  = _channelService.Get(order.OrderCarrier.ChannelID);
            var language = channel.WebsiteLanguageSystemId.HasValue ? _languageService.Get(channel.WebsiteLanguageSystemId.Value) : null;

            CultureInfo.CurrentUICulture = language != null ? language.CultureInfo : CultureInfo.CurrentUICulture;
            var routeRequestLookupInfo = new RouteRequestLookupInfo()
            {
                Channel            = channel,
                IsSecureConnection = true,
            };

            _errorPageResolver.TryGet(routeRequestLookupInfo, out var routeRequestInfo);

            //following result is used by Klarna AddOn to send the validation result back to Klarna.
            // ReSharper disable once ConvertToLambdaExpression
            return(new ValidationResult
            {
                IsOrderValid = true,
                RedirectToUrlOnValidationFailure = routeRequestInfo.DataPath,
            });
        }
コード例 #4
0
        public bool TryGet(RouteRequestLookupInfo routeRequestLookupInfo, out string redirectUrl)
        {
            if (_signInUrlResolver.TryGet(routeRequestLookupInfo, out redirectUrl))
            {
                redirectUrl += $"&code=403";
                return(true);
            }

            return(_parent.TryGet(routeRequestLookupInfo, out redirectUrl));
        }
コード例 #5
0
        public bool TryGet(RouteRequestLookupInfo routeRequestLookupInfo, out string redirectUrl)
        {
            string resultUrl = null;

            if (_pageByFieldType.TryFindPage(page =>
            {
                var url = _urlService.GetUrl(page, new PageUrlArgs(routeRequestLookupInfo.Channel.SystemId));
                if (url == null)
                {
                    return(false);
                }
                resultUrl = string.Concat(url, url.Contains("?") ? "&" : "?", "RedirectUrl=", HttpUtility.UrlEncode(routeRequestLookupInfo.RawUrl));
                return(true);
            }))
            {
                redirectUrl = resultUrl;
                return(true);
            }

            return(_parentResolver.TryGet(routeRequestLookupInfo, out redirectUrl));
        }
コード例 #6
0
        public bool TryGet(RouteRequestLookupInfo routeRequestLookupInfo, out RouteRequestInfo routeRequestInfo)
        {
            var result = new RouteRequestInfo();

            if (_pageByFieldType.TryFindPage(page =>
            {
                var url = _urlService.GetUrl(page, new PageUrlArgs(routeRequestLookupInfo.Channel.SystemId));
                if (url == null)
                {
                    return(false);
                }

                result.PageSystemId = page.SystemId;
                result.DataPath = url;
                return(true);
            }))
            {
                routeRequestInfo = result;
                return(true);
            }

            return(_parentResolver.TryGet(routeRequestLookupInfo, out routeRequestInfo));
        }
コード例 #7
0
 public bool TryFindPage(Func <Page, bool> predicate, bool ignorePermission = false, RouteRequestLookupInfo routeRequestLookupInfo = default)
 => TryGetPage(predicate, out var _, ignorePermission: ignorePermission, routeRequestLookupInfo: routeRequestLookupInfo);