コード例 #1
0
        protected bool IsPaymentExcluded(PaymentFilterRequest request)
        {
            var ba = request.Customer.BillingAddress;
            var sa = request.Customer.ShippingAddress;

            if (ba?.Country != null && !ba.Country.TwoLetterIsoCode.IsCaseInsensitiveEqual("DE"))
            {
                return(true);
            }
            if (sa != null && sa.Country != null && !sa.Country.TwoLetterIsoCode.IsCaseInsensitiveEqual("DE"))
            {
                return(true);
            }

            var settings = _services.Settings.LoadSetting <PayPalInstalmentsSettings>(request.StoreId);

            if (settings.ClientId.IsEmpty() || settings.Secret.IsEmpty())
            {
                return(true);
            }

            if (!CanPayOrderAmount(settings, request))
            {
                return(true);
            }

            return(false);
        }
コード例 #2
0
        protected bool CanPayOrderAmount(PayPalInstalmentsSettings settings, PaymentFilterRequest request)
        {
            var cartTotal = ((decimal?)_orderTotalCalculationService.Value.GetShoppingCartTotal(request.Cart)) ?? decimal.Zero;

            if (cartTotal == decimal.Zero)
            {
                return(false);
            }

            return(cartTotal >= settings.FinancingMin && cartTotal <= settings.FinancingMax);
        }
コード例 #3
0
        public void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (filterContext == null || filterContext.ActionDescriptor == null || filterContext.HttpContext == null || filterContext.HttpContext.Request == null)
            {
                return;
            }

            var store    = _services.StoreContext.CurrentStore;
            var customer = _services.WorkContext.CurrentCustomer;

            var paymentProvider = _paymentService.LoadPaymentMethodBySystemName(PayPalPlusProvider.SystemName, true, store.Id);

            if (paymentProvider == null)
            {
                return;
            }

            var cart = customer.GetCartItems(ShoppingCartType.ShoppingCart, store.Id);

            var filterRequest = new PaymentFilterRequest
            {
                PaymentMethod = paymentProvider,
                Customer      = customer,
                StoreId       = store.Id,
                Cart          = cart
            };

            if (_paymentService.IsPaymentMethodFiltered(filterRequest))
            {
                return;
            }

            // Skip payment if the cart total is zero. PayPal would return an error "Amount cannot be zero".
            decimal?cartTotal = _orderTotalCalculationService.Value.GetShoppingCartTotal(cart, true);

            if (cartTotal.HasValue && cartTotal.Value == decimal.Zero)
            {
                var urlHelper = new UrlHelper(filterContext.HttpContext.Request.RequestContext);
                var url       = urlHelper.Action("Confirm", "Checkout", new { area = "" });

                filterContext.Result = new RedirectResult(url, false);
            }
            else
            {
                _genericAttributeService.Value.SaveAttribute(customer, SystemCustomerAttributeNames.SelectedPaymentMethod, PayPalPlusProvider.SystemName, store.Id);

                var routeValues = new RouteValueDictionary(new { action = "PaymentWall", controller = "PayPalPlus" });
                filterContext.Result = new RedirectToRouteResult("SmartStore.PayPalPlus", routeValues);
            }
        }
コード例 #4
0
        public bool IsExcluded(PaymentFilterRequest request)
        {
            if (request.Customer == null)
            {
                return(false);
            }

            var method = request.PaymentMethod?.Metadata?.SystemName;

            if (method.IsCaseInsensitiveEqual(PayPalInstalmentsProvider.SystemName))
            {
                return(IsPaymentExcluded(request));
            }

            return(false);
        }