public ResultModel <string> ProcessPayment(ProcessPaymentViewModel model)
        {
            var resultModel        = new ResultModel <string>();
            var paymentStatusModel = new PaymentStateViewModel
            {
                PaymentStateEnum = Models.Enum.PaymentStateEnum.Pending,
            };

            model.PaymentStateViewModel = paymentStatusModel;


            try
            {
                resultModel = SelectPaymentProcessor(model);
                var response = (ProcessPayment)model;
                response.PaymentState        = (PaymentState)model.PaymentStateViewModel;
                response.PaymentState.Status = response.PaymentState.PaymentStateEnum.GetDescription();

                if (!resultModel.ErrorMessages.Any())
                {
                    _paymentStateRepo.Insert(response.PaymentState);
                    _processPaymentRepo.Insert(response);
                }
                _unitOfWork.SaveChanges();
            }
            catch (Exception ex)
            {
                resultModel.AddError(ex.Message);
                return(resultModel);
            }

            return(resultModel);
        }
Example #2
0
        public async Task <PaymentStateViewModel> Pay(PaymentViewModel model)
        {
            var payment = new Payment()
            {
                Amount           = model.Amount,
                CardHolder       = model.CardHolder,
                CreditCardNumber = model.CreditCardNumber,
                ExpirationDate   = model.ExpirationDate,
                Id           = new Guid(),
                SecurityCode = model.SecurityCode
            };
            var state = new PaymentState()
            {
                Payment     = payment,
                PaymentId   = payment.Id,
                CreatedDate = DateTime.Now,
                State       = PaymentStateEnum.Pending
            };

            db.Payments.Add(payment);
            db.PaymentStates.Add(state);
            await db.SaveChangesAsync();

            if (model.Amount <= 20)
            {
                var paymentState = ProcessPayment(_cheapPaymentGateway, payment);
                return(paymentState);
            }
            else if (model.Amount > 20 && model.Amount <= 500)
            {
                var paymentState = new PaymentStateViewModel();
                paymentState = ProcessPayment(_expensivePaymentGateway, payment);
                if (paymentState != null && paymentState.State == PaymentStateEnum.Processed)
                {
                    return(paymentState);
                }
                else
                {
                    paymentState = ProcessPayment(_cheapPaymentGateway, payment);
                }
                return(paymentState);
            }
            throw new Exception("Payment Could Not Be Processed");
        }
Example #3
0
        public PaymentStateViewModel ProcessPayment()
        {
            Random random = new Random();
            int    num    = random.Next(1, 100);

            if (num % 2 == 0)
            {
                PaymentStateViewModel returnModel = new PaymentStateViewModel
                {
                    CreatedDate = DateTime.Now,
                    State       = Entities.PaymentStateEnum.Processed
                };
                return(returnModel);
            }
            else
            {
                PaymentStateViewModel returnModel = new PaymentStateViewModel
                {
                    CreatedDate = DateTime.Now,
                    State       = Entities.PaymentStateEnum.Failed
                };
                return(returnModel);
            }
        }