Example #1
0
        public async Task <OrderInfo> Buy(OrderRequest orderRequest)
        {
            if (!OrderRepository.CheckValidOrder(orderRequest.OrderItems))
            {
                throw new MessageException("Invalid order");
            }
            decimal amount = OrderRepository.PricePerOrder(orderRequest.OrderItems);

            Order order = Mapper.Map <Order>(orderRequest);

            await InitializeOrderAsync(orderRequest, order);

            string chargeId = StripeService.CreateCharge(orderRequest.TokenId, (long)amount);

            order.ExternalReferenceId = chargeId;

            string status = await StripeService.GetStatusAsync(chargeId);

            order.OrderStatus = status;

            await OrderRepository.UpdateAsync(order);

            if (order.OrderStatus == "succeeded" || order.OrderStatus == "amount_capturable_updated")
            {
                await OrderRepository.RemoveItemsAsync(orderRequest.OrderItems);

                return(new OrderInfo()
                {
                    Message = "Transaction succeeded!"
                });
            }

            return(new OrderInfo()
            {
                Message = "Payment failed!"
            });
        }