public async Task <IActionResult> OnPostProcessOrderAsync() { Models.Order orderFromDb = await _orderService.GetOrderSummaryByOrderId(OrderDetails.Order.Id); orderFromDb.OrderStatus = SD.OrderStatus.PROCESSING; orderFromDb.UpdatedAt = DateTime.Now; orderFromDb.UpdatedBy = User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier).Value; orderFromDb.OrderActionId = (long)SD.OrderAction.PROCESS; var isProcessSuccess = await _orderService.Update(orderFromDb); if (!isProcessSuccess) { ErrorMessage = "Failed to process order."; } return(RedirectToPage()); }
public async Task <IActionResult> OnPostAsync(string stripeToken) { ShoppingCartVM.Order.PaymentStatus = SD.PaymentStatus.APPROVED; ShoppingCartVM.Order.OrderStatus = SD.OrderStatus.APPROVED; ShoppingCartVM.Order.OrderDate = DateTime.Now; ShoppingCartVM.CartItems = await _cartService.GetAll(ShoppingCartVM.Order.UserId); ShoppingCartVM.Order.OrderTotal = CalculateSum(ShoppingCartVM.CartItems); if (ModelState.IsValid) { try { if (stripeToken != null) { Models.Order newOrder = await _orderService.Create(ShoppingCartVM); if (newOrder == null) { throw new Exception("Order creation failed"); } HttpContext.Session.SetInt32(SD.CART_SESSION_KEY, 0); var chargeOptions = new ChargeCreateOptions { Amount = Convert.ToInt32(newOrder.OrderTotal * 100), Currency = "MYR", Description = $"E-Mall Order No. {newOrder.Id}", Source = stripeToken }; var chargeService = new ChargeService(); Charge charge = chargeService.Create(chargeOptions); if (charge.Id == null) { newOrder.PaymentStatus = SD.PaymentStatus.REJECTED; } else { newOrder.TransactionId = charge.Id; } if (charge.Status.ToLower() == SD.StripeChargeStatus.SUCCEEDED) { newOrder.PaymentStatus = SD.PaymentStatus.APPROVED; newOrder.OrderStatus = SD.OrderStatus.APPROVED; newOrder.PaymentDate = DateTime.Now; } await _orderService.Update(newOrder); SuccessMessage = "Thank you! Your order has been placed successfully!"; } } catch { ErrorMessage = "There is an error placing your order. Please try again later."; } } else { ErrorMessage = "The information provided is not valid."; } return(RedirectToPage()); }