Ejemplo n.º 1
0
        public bool ExecutePayment(PaymentServiceRequest payment, PaymentServiceCredentials credentials)
        {
            log.Debug("ExecutePayment called from PaymentService");

            var encoded = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(credentials.UserName + ":" + credentials.Password));

            var mockProcessorRequest = (HttpWebRequest)WebRequest.Create("https://mock-payment-processor.appspot.com/v1/payment");

            mockProcessorRequest.Headers.Add("Authorization", "Basic " + encoded);
            mockProcessorRequest.ContentType = "application/json";
            mockProcessorRequest.Method      = "POST";

            var json = JsonConvert.SerializeObject(payment);

            using (var streamWriter = new StreamWriter(mockProcessorRequest.GetRequestStream()))
            {
                streamWriter.Write(json);
                streamWriter.Flush();
                streamWriter.Close();
            }

            try
            {
                var httpResponse = (HttpWebResponse)mockProcessorRequest.GetResponse();
                using (var streamReader = new StreamReader(httpResponse.GetResponseStream() ?? throw new InvalidOperationException()))
                {
                    var result = streamReader.ReadToEnd();
                    return(!string.IsNullOrEmpty(result));
                }
            }
            catch (InvalidOperationException)
            {
                //add logging someday
                return(false);
            }
        }
Ejemplo n.º 2
0
        public IActionResult FinishOrder([FromBody] OrderRequest request)
        {
            var userContext = _dbContext.Set <User>()
                              .Include(x => x.Cart)
                              .Include(x => x.Cart.ProductCarts)
                              .ThenInclude(pc => pc.Product);

            var userEmail = User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Name)?.Value;

            if (userEmail == null)
            {
                return(BadRequest("Your session has ended please try to login again"));
            }

            var user = userContext.FirstOrDefault(x => x.Email == userEmail);

            if (user == null)
            {
                return(BadRequest("Your session has ended"));
            }

            if (user.Cart == null || !user.Cart.ProductCarts.Any())
            {
                return(BadRequest("Cart is empty"));
            }

            var amountToPay = Math.Round(user.Cart.ProductCarts.Sum(y => y.Product.Price * y.Amount));

            //Get this error in PaymentService later
            if (amountToPay > 999999)
            {
                return(BadRequest("You don't have enough funds in your bank"));
            }
            var credentials = new PaymentServiceCredentials()
            {
                UserName = Configuration["PaymentServiceUserName"],
                Password = Configuration["PaymentServicePassword"]
            };

            var paymentData = new PaymentServiceRequest()
            {
                amount    = Convert.ToInt32(amountToPay),
                holder    = request.PaymentRequest.Holder,
                cvv       = request.PaymentRequest.Cvv,
                exp_month = request.PaymentRequest.ExpMonth,
                exp_year  = request.PaymentRequest.ExpYear,
                number    = request.PaymentRequest.Number
            };

            var paymentResult = _paymentService.ExecutePayment(paymentData, credentials);

            if (!paymentResult)
            {
                return(BadRequest("Your Payment was cancelled please check your data"));
            }

            var newOrder = new Order()
            {
                UserId        = user.Id,
                Address       = request.Address,
                StartedDate   = DateTimeOffset.Now,
                State         = OrderStateEnum.Ordered,
                FirstName     = request.FirstName,
                LastName      = request.LastName,
                ProductOrders = user.Cart.ProductCarts.Select(x => new ProductOrder()
                {
                    Amount      = x.Amount,
                    ProductId   = x.ProductId,
                    SinglePrice = x.Product.DiscountedPrice == 0 ? x.Product.Price : x.Product.DiscountedPrice
                }).ToList()
            };

            _dbContext.Add(newOrder);
            _dbContext.Remove(user.Cart);

            var result = _dbContext.SaveChanges();

            if (result > 0)
            {
                return(Ok("Payment successful, thank you for your patronage!"));
            }

            return(BadRequest("Nothing changed"));
        }
Ejemplo n.º 3
0
 public bool ExecutePayment(PaymentServiceRequest payment, PaymentServiceCredentials credentials)
 {
     log.Debug("ExecutePayment called from MockPaymentProcessor");
     return(true);
 }