示例#1
0
        public IHttpActionResult Buy(TicketBuyModel model)
        {
            int    hours         = model.Hours;
            string currentUserId = this.User.Identity.GetUserId();
            User   user          = this.context.Users.FirstOrDefault(u => u.Id == currentUserId);

            decimal ticketPrice = ((hours - 1) * TicketPricePerHour) + InitialTicketPrice;

            // get discount for one or more weekend tickets
            if (hours > OneWeekInHours)
            {
                ticketPrice = ticketPrice - (ticketPrice * DiscountValue);
            }

            if (user.Balance - ticketPrice < 0)
            {
                return(this.BadRequest(string.Format("Not enough money! Ticket price: {0}. Your balance: {1}", ticketPrice, user.Balance)));
            }

            Ticket ticket = this.ticketService.Create(hours, ticketPrice);

            user.Balance -= ticketPrice;
            user.Tickets.Add(ticket);
            context.SaveChanges();

            return(this.Created("/", new
            {
                QRCode = ticket.QRCode,
                Cost = ticketPrice
            }));
        }
示例#2
0
        public async Task <ActionResult> Buy(IFormCollection collection)
        {
            try
            {
                var buyModel = await PrepareTicketBuyViewModel(Guid.Parse(collection["evnt.Id"]));

                if (buyModel.evnt == null || buyModel.evnt.TotalAvailableTickets < 1)
                {
                    return(View("Error"));
                }
                var paymentData = new PaymentData()
                {
                    CardNumber   = collection["paymentData.CardNumber"],
                    NameOnCard   = collection["paymentData.NameOnCard"],
                    ValidMonth   = Int32.Parse(collection["paymentData.ValidMonth"]),
                    ValidYear    = Int32.Parse(collection["paymentData.ValidYear"]),
                    SecurityCode = collection["paymentData.SecurityCode"],
                    Value        = buyModel.evnt.Price
                };
                paymentData = await MakePayment(paymentData);

                buyModel.paymentData = paymentData;
                if (buyModel.user.Id == Guid.Empty)
                {
                    buyModel.user = await UserManager.GetUserByAuthId(buyModel.user);
                }
                if (paymentData.TransactionSuccessful)
                {
                    //var ticket = await TicketManager.IssueEventTicket(buyModel.evnt, buyModel.user, paymentData.ToString());
                    var ticketBuyModel = new TicketBuyModel()
                    {
                        EventId     = buyModel.evnt.Id,
                        UserId      = buyModel.user.Id,
                        PaymentData = paymentData.ToString()
                    };
                    var ticket = await IssueTicket(ticketBuyModel);

                    return(RedirectToAction("ViewTicket", new { id = ticket.Id }));
                }
                return(View("Error"));
            }
            catch
            {
                return(View("Error"));
            }
        }
示例#3
0
        public async Task <Ticket> IssueTicket(TicketBuyModel buyModel)
        {
            using (var client = new HttpClient())
            {
                var request = new HttpRequestMessage
                {
                    RequestUri = new Uri(Configuration["TicketApiUrl"]),
                    Method     = HttpMethod.Post
                };
                request.Content = new StringContent(JsonConvert.SerializeObject(buyModel));
                request.Content.Headers.ContentType = new MediaTypeHeaderValue("text/plain");

                //request.Content.Headers.ContentType = new MediaTypeHeaderValue(parameters.ContentType);

                var result = client.SendAsync(request).Result;
                result.EnsureSuccessStatusCode();
                return(JsonConvert.DeserializeObject <Ticket>(await result.Content.ReadAsStringAsync()));
            }
        }
        public async Task <Ticket> IssueTicket(TicketBuyModel buyModel)
        {
            using (var httpClientHandler = new HttpClientHandler())
            {
                httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return(true); };
                using (var client = new HttpClient(httpClientHandler))
                {
                    var request = new HttpRequestMessage
                    {
                        RequestUri = new Uri(Configuration["TicketApiUrl"]),
                        Method     = HttpMethod.Post
                    };
                    request.Content = new StringContent(JsonConvert.SerializeObject(buyModel));
                    request.Content.Headers.ContentType = new MediaTypeHeaderValue("text/plain");

                    //request.Content.Headers.ContentType = new MediaTypeHeaderValue(parameters.ContentType);

                    var result = client.SendAsync(request).Result;
                    result.EnsureSuccessStatusCode();
                    return(JsonConvert.DeserializeObject <Ticket>(await result.Content.ReadAsStringAsync()));
                }
            }
        }