示例#1
0
        protected virtual async Task <bool> ValidatePaymentMethod(ValidatePaymentMethodParam param)
        {
            Guard.NotNullOrWhiteSpace(param.CartName, nameof(param.CartName));
            Guard.NotNullOrWhiteSpace(param.Scope, nameof(param.Scope));
            Guard.NotNullOrWhiteSpace(param.ProviderName, nameof(param.ProviderName));
            Guard.NotNull(param.CultureInfo, nameof(param.CultureInfo));
            Guard.NotNull(param.CustomerId, nameof(param.CustomerId));
            Guard.NotNull(param.PaymentMethodId, nameof(param.PaymentMethodId));

            var getPaymentMethodParam = new GetPaymentMethodsParam()
            {
                CartName        = param.CartName,
                Scope           = param.Scope,
                CultureInfo     = param.CultureInfo,
                CustomerId      = param.CustomerId,
                IsAuthenticated = param.IsAuthenticated,
                ProviderNames   = new List <string>()
                {
                    param.ProviderName
                }
            };

            var paymentMethod = await GetAllPaymentMethodsAsync(getPaymentMethodParam).ConfigureAwait(false);

            if (paymentMethod == null || paymentMethod.All(p => p.Id != param.PaymentMethodId))
            {
                throw new Exception($"Payment method for provider name /'{param.ProviderName}/' not found.");
            }
            return(paymentMethod
                   .FirstOrDefault(p => p.Id == param.PaymentMethodId)
                   .IsValid);
        }
示例#2
0
        protected virtual async Task <bool> ValidatePaymentMethod(ValidatePaymentMethodParam param)
        {
            if (param == null)
            {
                throw new ArgumentNullException(nameof(param));
            }
            if (string.IsNullOrWhiteSpace(param.CartName))
            {
                throw new ArgumentException(GetMessageOfNullWhiteSpace(nameof(param.CartName)), nameof(param));
            }
            if (string.IsNullOrWhiteSpace(param.Scope))
            {
                throw new ArgumentException(GetMessageOfNullWhiteSpace(nameof(param.Scope)), nameof(param));
            }
            if (string.IsNullOrWhiteSpace(param.ProviderName))
            {
                throw new ArgumentException(GetMessageOfNullWhiteSpace(nameof(param.ProviderName)), nameof(param));
            }
            if (param.CultureInfo == null)
            {
                throw new ArgumentException(GetMessageOfNull(nameof(param.CultureInfo)), nameof(param));
            }
            if (param.CustomerId == null)
            {
                throw new ArgumentException(GetMessageOfNull(nameof(param.CustomerId)), nameof(param));
            }
            if (param.PaymentMethodId == null)
            {
                throw new ArgumentException(GetMessageOfNull(nameof(param.PaymentMethodId)), nameof(param));
            }

            var getPaymentMethodParam = new GetPaymentMethodsParam()
            {
                CartName        = param.CartName,
                Scope           = param.Scope,
                CultureInfo     = param.CultureInfo,
                CustomerId      = param.CustomerId,
                IsAuthenticated = param.IsAuthenticated,
                ProviderNames   = new List <string>()
                {
                    param.ProviderName
                }
            };

            var paymentMethods = await GetAllPaymentMethodsAsync(getPaymentMethodParam).ConfigureAwait(false);

            var paymentMethod = paymentMethods?.Find(x => x.Id == param.PaymentMethodId);

            return(paymentMethod?.IsValid ?? throw new Exception($"Payment method for provider name /'{param.ProviderName}/' not found."));;
        }
示例#3
0
        public virtual async Task <CartViewModel> UpdateRecurringOrderCartPaymentMethodAsync(UpdatePaymentMethodParam param, string baseUrl)
        {
            if (param == null)
            {
                throw new ArgumentNullException(nameof(param));
            }
            if (string.IsNullOrWhiteSpace(param.CartName))
            {
                throw new ArgumentException(ArgumentNullMessageFormatter.FormatErrorMessage("CartName"), nameof(param));
            }
            if (string.IsNullOrWhiteSpace(param.PaymentProviderName))
            {
                throw new ArgumentException(ArgumentNullMessageFormatter.FormatErrorMessage("PaymentProviderName"), nameof(param));
            }
            if (string.IsNullOrWhiteSpace(param.Scope))
            {
                throw new ArgumentException(ArgumentNullMessageFormatter.FormatErrorMessage("Scope"), nameof(param));
            }
            if (param.CultureInfo == null)
            {
                throw new ArgumentException(ArgumentNullMessageFormatter.FormatErrorMessage("CultureInfo"), nameof(param));
            }
            if (param.CustomerId == default(Guid))
            {
                throw new ArgumentException(ArgumentNullMessageFormatter.FormatErrorMessage("CustomerId"), nameof(param));
            }
            if (param.PaymentId == default(Guid))
            {
                throw new ArgumentException(ArgumentNullMessageFormatter.FormatErrorMessage("PaymentId"), nameof(param));
            }
            if (param.PaymentMethodId == default(Guid))
            {
                throw new ArgumentException(ArgumentNullMessageFormatter.FormatErrorMessage("PaymentMethodId"), nameof(param));
            }

            var activePayment = await PaymentRepository.GetPaymentAsync(new GetPaymentParam {
                CartName    = param.CartName,
                CultureInfo = param.CultureInfo,
                CustomerId  = param.CustomerId,
                Scope       = param.Scope,
                PaymentId   = param.PaymentId
            }).ConfigureAwait(false);

            if (activePayment == null)
            {
                return(null);
            }

            if (activePayment.ShouldInvokePrePaymentSwitch())
            {
                activePayment = await PreparePaymentSwitch(param, activePayment);

                param.PaymentId = activePayment.Id;
            }

            var validatePaymentMethodParam = new ValidatePaymentMethodParam()
            {
                CartName        = param.CartName,
                CultureInfo     = param.CultureInfo,
                CustomerId      = param.CustomerId,
                IsAuthenticated = param.IsAuthenticated,
                ProviderName    = param.PaymentProviderName,
                Scope           = param.Scope,
                PaymentMethodId = param.PaymentMethodId
            };

            var isPaymentMethodValid = await ValidatePaymentMethod(validatePaymentMethodParam);

            if (!isPaymentMethodValid)
            {
                throw new Exception($"Payment method for provider name /'{param.PaymentProviderName}/' not valid. Credit card has probably expired.");
            }

            Overture.ServiceModel.Orders.Cart cart = await PaymentRepository.UpdatePaymentMethodAsync(param);

            var initParam       = BuildInitializePaymentParam(cart, param);
            var paymentProvider = ObtainPaymentProvider(param.PaymentProviderName);

            cart = await paymentProvider.InitializePaymentAsync(cart, initParam);

            var vm = await RecurringOrderCartsViewService.CreateCartViewModelAsync(new CreateRecurringOrderCartViewModelParam
            {
                Cart        = cart,
                CultureInfo = param.CultureInfo,
                IncludeInvalidCouponsMessages = false,
                BaseUrl = baseUrl
            });

            return(vm);
        }
示例#4
0
        public virtual async Task <ActivePaymentViewModel> UpdateActivePaymentMethodAsync(UpdatePaymentMethodParam param)
        {
            if (param == null)
            {
                throw new ArgumentNullException(nameof(param));
            }
            if (string.IsNullOrWhiteSpace(param.CartName))
            {
                throw new ArgumentException(GetMessageOfNullWhiteSpace(nameof(param.CartName)), nameof(param));
            }
            if (string.IsNullOrWhiteSpace(param.PaymentProviderName))
            {
                throw new ArgumentException(GetMessageOfNullWhiteSpace(nameof(param.PaymentProviderName)), nameof(param));
            }
            if (string.IsNullOrWhiteSpace(param.Scope))
            {
                throw new ArgumentException(GetMessageOfNullWhiteSpace(nameof(param.Scope)), nameof(param));
            }
            if (param.CultureInfo == null)
            {
                throw new ArgumentException(GetMessageOfNull(nameof(param.CultureInfo)), nameof(param));
            }
            if (param.CustomerId == Guid.Empty)
            {
                throw new ArgumentException(GetMessageOfEmpty(nameof(param.CustomerId)), nameof(param));
            }
            if (param.PaymentId == Guid.Empty)
            {
                throw new ArgumentException(GetMessageOfEmpty(nameof(param.PaymentId)), nameof(param));
            }
            if (param.PaymentMethodId == Guid.Empty)
            {
                throw new ArgumentException(GetMessageOfEmpty(nameof(param.PaymentMethodId)), nameof(param));
            }

            var payments = await GetCartPaymentsAsync(param).ConfigureAwait(false);

            var activePayment = payments.GetPayment(param.PaymentId);

            if (activePayment.ShouldInvokePrePaymentSwitch())
            {
                activePayment = await PreparePaymentSwitch(param, activePayment);

                param.PaymentId = activePayment.Id;
            }

            var validatePaymentMethodParam = new ValidatePaymentMethodParam()
            {
                CartName        = param.CartName,
                CultureInfo     = param.CultureInfo,
                CustomerId      = param.CustomerId,
                IsAuthenticated = param.IsAuthenticated,
                ProviderName    = param.PaymentProviderName,
                Scope           = param.Scope,
                PaymentMethodId = param.PaymentMethodId
            };

            var isPaymentMethodValid = await ValidatePaymentMethod(validatePaymentMethodParam);

            if (!isPaymentMethodValid)
            {
                throw new Exception($"Payment method for provider name /'{param.PaymentProviderName}/' not valid. Credit card has probably expired.");
            }

            Overture.ServiceModel.Orders.Cart cart = await PaymentRepository.UpdatePaymentMethodAsync(param);

            var initParam       = BuildInitializePaymentParam(cart, param);
            var paymentProvider = ObtainPaymentProvider(param.PaymentProviderName);

            cart = await paymentProvider.InitializePaymentAsync(cart, initParam);

            var activePaymentVm = GetActivePaymentViewModel(new GetActivePaymentViewModelParam
            {
                Cart            = cart,
                CultureInfo     = param.CultureInfo,
                PaymentProvider = paymentProvider,
                IsAuthenticated = param.IsAuthenticated
            });

            return(activePaymentVm);
        }