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); } }
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")); }
public bool ExecutePayment(PaymentServiceRequest payment, PaymentServiceCredentials credentials) { log.Debug("ExecutePayment called from MockPaymentProcessor"); return(true); }