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); }
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."));; }
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); }
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); }