예제 #1
0
        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());
        }
예제 #2
0
        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());
        }