Esempio n. 1
0
        public async Task <ActionResult> Payment([FromBody] OrderRM OrderRM)
        {
            var    claim    = HttpContext.User.Claims.ElementAt(0);
            string userName = claim.Value;

            var order = await new PaymentRepo(_context, _config).Order(OrderRM, userName);

            if (!order.Item1)
            {
                return(BadRequest(order.Item2));
            }

            return(Ok(order.Item2));
        }
Esempio n. 2
0
        public async Task <Tuple <bool, object> > Order(OrderRM orderRM, string userName)
        {
            Random random = new Random();
            var    items  = new List <ItemsRM>();

            //PaymentTypeId 3 is pay by cash
            if (orderRM.PaymentTypeId != 3)
            {
                StripeConfiguration.ApiKey = _config["Stripe_SecretKey"];

                var optionsToken = new TokenCreateOptions
                {
                    Card = new CreditCardOptions
                    {
                        Number   = orderRM.CardNumber,
                        ExpMonth = orderRM.Month,
                        ExpYear  = orderRM.Year,
                        Cvc      = orderRM.Cvc
                    }
                };

                if (optionsToken == null)
                {
                    return(new Tuple <bool, object>(false, "Payment cannot be completed"));
                }

                var   serviceToken = new TokenService();
                Token stripeToken  = await serviceToken.CreateAsync(optionsToken);

                if (stripeToken == null)
                {
                    return(new Tuple <bool, object>(false, "Payment cannot be completed"));
                }

                var options = new ChargeCreateOptions
                {
                    Amount      = orderRM.Amount * 100,
                    Currency    = "usd",
                    Source      = stripeToken.Id,
                    Description = $"Success final project payment by {userName}"
                };

                var    service = new ChargeService();
                Charge charge  = await service.CreateAsync(options);

                if (!charge.Paid)
                {
                    return(new Tuple <bool, object>(false, "Payment cannot be completed"));
                }
            }

            var customerId = _context.CustomerInfo.Where(c => c.UsersEmail == userName).FirstOrDefault().CustomerId;

            var order = new Orders
            {
                CustomerId    = customerId,
                OrderTotal    = orderRM.Amount,
                PaymentTypeId = orderRM.PaymentTypeId,
            };

            var randomId = random.Next(10000);

            while (_context.Orders.Any(id => id.OrderId == randomId))
            {
                randomId = random.Next(10000);
            }

            order.OrderId = randomId;

            _context.Orders.Add(order);

            foreach (ItemsRM item in orderRM.itemsRM)
            {
                var StoreItem = new SelectedItem {
                    OrderId = randomId, MenuItemId = item.Item.MenuItemId, Quantity = item.qty
                };
                items.Add(item);
                _context.SelectedItem.Add(StoreItem);
            }

            await _context.SaveChangesAsync();

            var returnOrder = new OrderCompleteRM
            {
                OrderId       = order.OrderId,
                Customer      = userName,
                ItemsRM       = items,
                OrderTotal    = order.OrderTotal,
                PaymentTypeId = order.PaymentTypeId
            };

            return(new Tuple <bool, object>(true, returnOrder));
        }