//SIMULATED TOKEN WEB SERVICE private HttpStatusCodeResult TokenWebService(Guid id) { try { using (AuctionHouseModel db = new AuctionHouseModel()) { TokenOrder order = db.GetTokenOrder(id); if (order.state == "SUBMITTED") { order.state = "COMPLETED"; db.SaveChanges(); } else { order.state = "CANCELED"; db.SaveChanges(); throw new Exception("Error occured: Token order is invalid!"); } } } catch (Exception error) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, error.Message)); } return(new HttpStatusCodeResult(HttpStatusCode.Accepted)); }
public Guid CreateOrder(Guid userId, string type) { int amount = 0; switch (type) { case "silver": amount = Convert.ToInt32(_systemParameterRepository.GetByParameterName("S").ParameterValue); break; case "gold": amount = Convert.ToInt32(_systemParameterRepository.GetByParameterName("G").ParameterValue); break; case "platinum": amount = Convert.ToInt32(_systemParameterRepository.GetByParameterName("P").ParameterValue); break; } var price = amount * Convert.ToInt32(_systemParameterRepository.GetByParameterName("T").ParameterValue); var orderId = Guid.NewGuid(); var timestamp = DateTime.Now; TokenOrder order = new TokenOrder { Id = orderId, Amount = amount, Price = price, UserId = userId, StatusId = _tokenOrderStatusRepository.GetByType("SUBMITTED").Id, TimestampCreated = timestamp, TimestampChanged = timestamp }; _tokenOrderRepository.Save(order); return(orderId); }
public ActionResult Order(string tokens) { AdminSettings admin = db.adminSettings.FirstOrDefault(); User user = Session["User"] as User; int tokensNum = 0; if (tokens == "silver") { tokensNum = admin.S; } if (tokens == "gold") { tokensNum = admin.G; } if (tokens == "platinum") { tokensNum = admin.P; } TokenOrder order = new TokenOrder { id = Guid.NewGuid(), dateSubmitted = System.DateTime.Now, type = tokens, userId = user.id, numOfTokens = tokensNum, price = tokensNum * admin.T, status = "SUBMITTED" }; db.tokenOrders.Add(order); db.SaveChanges(); return(Redirect("http://stage.centili.com/payment/widget?apikey=8603e733aca172f0f2472ecadffb5739&country=rs&reference=" + order.id + "&returnurl=http://sj150153.azurewebsites.net/TokenOrder/Completed")); }
public ActionResult Create([Bind(Include = "NumTokens")] TokenOrder tokenOrder) { if (!Auth.Check()) { return(RedirectToLogin()); } if (ModelState.IsValid) { tokenOrder.GUID = Guid.NewGuid().ToString(); tokenOrder.UserId = Auth.Id; tokenOrder.Status = "SUBMITTED"; tokenOrder.PackagePrice = (decimal)(tokenOrder.NumTokens * GetTokenPrice()); tokenOrder.DateSubmitted = DateTime.UtcNow; db.TokenOrders.Add(tokenOrder); db.SaveChanges(); Flash.SuccessMessage("Order submitted"); return(RedirectToAction("Index")); } return(View(tokenOrder)); }
public string OrderTokens(int package) { if (Session["user"] == null) { return(string.Empty); } using (var db = new AuctionHouseDB()) { try { var parameters = db.GetCurrentSystemParameters(); decimal amount = 0; switch (package) { case 0: amount = parameters.SilverPackage; break; case 1: amount = parameters.GoldPackage; break; case 2: amount = parameters.PlatinumPackage; break; default: return("#Error: Such package does not exist."); } var order = new TokenOrder { ID = Guid.NewGuid(), Buyer = ((User)Session["user"]).ID, Amount = amount, Currency = parameters.Currency, PriceRate = parameters.PriceRate, Status = null }; try { db.TokenOrders.Add(order); db.SaveChanges(); } catch (Exception ex) { log.Error(ex.Message, ex); return("#Error: Could not initiate order. Please, try again."); } AuctionHub.HubContext.Clients.All.onTokenOrderCreated(order.Buyer.ToString(), order.ID.ToString(), order.Amount.ToString(Settings.DecimalFormat), order.Currency, order.PriceRate.ToString(Settings.DecimalFormat)); return("<a id=\"c-mobile-payment-widget\" href=\"https://stage.centili.com/payment/widget?apikey=b23180535003ba668fe3d1d2876ad928&reference=" + order.ID + "&country=rs&package=" + package + "\" target=\"_blank\"><img src=\"https://www.centili.com/images/centili-widget-button.png\"/></a>"); } catch (Exception ex) { log.Error(ex.Message, ex); return("#Error: Unknown error occured."); } } }
public ActionResult MyOrders() { User u = (User)Session[KeysUtils.SessionUser()]; if (u == null) { return(RedirectToAction("Index", "Home")); } else { List <TokenOrder> to = TokenOrder.getOrdersForUser(u.user_id); return(View(to)); } }
// GET: TokenOrders/Details/5 public ActionResult Details(string id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } TokenOrder tokenOrder = Db.TokenOrders.Find(id); if (tokenOrder == null) { return(HttpNotFound()); } return(View(tokenOrder)); }
public void OrderTokens(string userID, int package) { User loggedUser = (User)Session["user"]; if (loggedUser == null || loggedUser.ID.ToString() != userID) { return; } using (var ctx = new AuctionModel()) { try { SystemParameter system = ctx.GetSystemParameters(); var tokenamount = decimal.Zero; switch (package) { case 0: tokenamount = system.SilverCount; break; case 1: tokenamount = system.GoldCount; break; case 2: tokenamount = system.PlatinumCount; break; } TokenOrder order = new TokenOrder() { ID = Guid.NewGuid(), Buyer = loggedUser.ID, TokenAmount = tokenamount, TokenValue = system.TokenValue, Currency = system.Currency, State = 0 }; ctx.TokenOrders.Add(order); ctx.SaveChanges(); AuctionHub.HubContext.Clients.All.onOrderTokens(loggedUser.ID.ToString(), order.ID.ToString(), order.TokenAmount.ToString("F4"), order.Currency, order.TokenValue.ToString("F4"), order.State); } catch (Exception e) { logger.Error(e.Message); } } }
// sending email private async Task PostMessage(TokenOrder Order, User User) { var apiKey = System.Environment.GetEnvironmentVariable("SENDGRID_API_KEY"); var client = new SendGridClient(apiKey); var msg = new SendGridMessage() { From = new EmailAddress("*****@*****.**", "Matija Lukic"), Subject = "Kupovina Tokena", PlainTextContent = "Zdravo!", HtmlContent = "<h1>Kupili ste " + Order.Amount + " Tokena</h1><p>Po ceni od " + Order.Price + " RSD</p>" }; msg.AddTo(new EmailAddress(User.Email)); await client.SendEmailAsync(msg); }
public ActionResult Completed(Guid?reference, string status) { using (var transaction = db.Database.BeginTransaction(IsolationLevel.Serializable)) { try { TokenOrder order = db.tokenOrders.Where(t => t.id == reference).FirstOrDefault(); if (order == null) { RedirectToAction("TokenOrders", "TokenOrder"); } if (order.status == "SUBMITTED") { if (status == "success") { order.status = "COMPLETED"; User user1 = Session["User"] as User; User user = db.users.Where(u => u.id == user1.id).FirstOrDefault(); user.numOfTokens += order.numOfTokens; var number = user.numOfTokens; var hubContext = GlobalHost.ConnectionManager.GetHubContext <HubProjekat>(); hubContext.Clients.All.userUp1(user.numOfTokens, user.id); db.Entry(user).State = EntityState.Modified; db.Entry(order).State = EntityState.Modified; db.SaveChanges(); EmailClass.Email(user.mail, "Token order", "Token order completed"); transaction.Commit(); } else { order.status = "CANCELED"; db.Entry(order).State = EntityState.Modified; db.SaveChanges(); ViewBag.Mesage = "The order is canceled"; transaction.Commit(); } } } catch (Exception e) { transaction.Rollback(); ViewBag.Message = "There is an error in transaction"; log.Error($"Error-not completed token order on {DateTime.Now}"); } } return(RedirectToAction("TokenOrders", "TokenOrder")); }
public ActionResult OrderTokens(OrderTokensViewModel orderView) { try { if (!ModelState.IsValid) { throw new Exception("All fields must be filled correctly!"); } PartialUser logged_user = IsLoggedIn(); if (logged_user == null) { throw new Exception("Forbidden access!"); } using (AuctionHouseModel db = new AuctionHouseModel()) { SystemParameter sp = db.GetSystemParameters(); TokenOrder order = new TokenOrder { id = Guid.NewGuid(), orderer = logged_user.email, amount = (int)orderView.Package, price = (int)orderView.Package * sp.T, state = "SUBMITTED" }; db.TokenOrders.Add(order); db.SaveChanges(); HttpStatusCodeResult service_result = TokenWebService(order.id); if (service_result.StatusCode != 0xca) { throw new Exception(service_result.ToString()); } User user = db.FindUser(logged_user.email); user.tokens_amount += order.amount; db.SaveChanges(); } } catch (Exception error) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, error.Message)); } return(null); }
public ActionResult ProcessOrder(string clientid, string status) { logger.Info("GET/Accounts/ProcessOrder action has been called"); TokenOrder order = myDB.TokenOrders.Find(int.Parse(clientid)); if (order == null) { return(new HttpStatusCodeResult(HttpStatusCode.NotFound)); } if (status == "failed" || status == "canceled") { order.State = "CANCELED"; TempData["OrderMessage"] = "Order failed!"; } else { order.State = "COMPLETED"; User user = myDB.Users.Find(order.IdUser); if (user == null) { return(new HttpStatusCodeResult(HttpStatusCode.NotFound)); } user.TokensNumber += order.TokensNumber; myDB.Entry(user).State = EntityState.Modified; myDB.SaveChanges(); myDB.Entry(user).State = EntityState.Detached; SendEmail(user.Email); } myDB.Entry(order).State = EntityState.Modified; myDB.SaveChanges(); myDB.Entry(order).State = EntityState.Detached; return(RedirectToAction("UserInformation")); }
public ActionResult CentiliReply(Guid?reference, string status) { // using (var transaction = db.Database.BeginTransaction(IsolationLevel.Serializable)) // { // try { TokenOrder order = db.TokenOrder.Where(t => t.Id == reference).FirstOrDefault(); if (order != null && order.Status == "SUBMITTED") { User user = db.User.Where(u => u.Id == order.UserId).FirstOrDefault();// TokenOrder.Find(order.UserId).User; if (status != "success") { order.Status = "CANCELED"; db.Entry(order).State = EntityState.Modified; db.SaveChanges(); } else { user.NumberOfTokens = user.NumberOfTokens + order.NumberOfTokens; order.Status = "COMPLETED"; db.Entry(user).State = EntityState.Modified; string subject = $"Your token order"; string body = $"Your tokens have been succesfully bought!</p>"; SendEmail.Email(body, user.Email, subject); db.Entry(order).State = EntityState.Modified; db.SaveChanges(); return(RedirectToAction("Index", "Home")); } } /* } * catch (Exception e) * { * transaction.Rollback(); * log.Error($"Unsucceded transaction on {DateTime.Now}"); * } * } */ return(RedirectToAction("UserIndex", "Auction")); }
public ActionResult Create(string package) { double price = 0; int tokenCount = 0; if (package == "Gold") { tokenCount = Settings.GlobalSettings.G; } else if (package == "Silver") { tokenCount = Settings.GlobalSettings.S; } else { tokenCount = Settings.GlobalSettings.P; } price = tokenCount * Settings.GlobalSettings.T; TokenOrder tokenOrder = new TokenOrder(); if (ModelState.IsValid) { tokenOrder.ID = Guid.NewGuid(); tokenOrder.AspNetUser = db.AspNetUsers.Find(User.Identity.GetUserId()); tokenOrder.Price = (decimal)price; tokenOrder.TokenCount = tokenCount; tokenOrder.State = "SUBMITTED"; db.TokenOrders.Add(tokenOrder); db.SaveChanges(); Logger.Logger.log("token order " + tokenOrder.ID + " created"); return(RedirectToAction("Index")); } ViewBag.UserID = new SelectList(db.AspNetUsers, "Id", "Email", tokenOrder.UserID); return(View(tokenOrder)); }
public ActionResult OrderToken(int num) { logger.Info("GET/Accounts/OrderTokens(num) action has been called"); if (Session["User"] == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } TokenOrder order = new TokenOrder(); int tokens = 0; if (num == 1) { tokens = (int)myDB.SystemParameters.First().Platnium; } else if (num == 2) { tokens = (int)myDB.SystemParameters.First().Gold; } else { tokens = (int)myDB.SystemParameters.First().Silver; } order.TokensNumber = tokens; order.Price = order.TokensNumber * myDB.SystemParameters.First().TokensValue; order.IdUser = ((User)Session["User"]).IdUser; order.State = "SUBMITTED"; order.OrderTime = DateTime.UtcNow; myDB.TokenOrders.Add(order); myDB.SaveChanges(); return(Redirect("http://stage.centili.com/payment/widget?apikey=f56c4e470aa1e62148c5c14ac2f45007&country=rs&reference=" + order.Id)); }
public ActionResult Order(int number) { TokenOrder order = new TokenOrder(); // User user = Session["User"] as User; string userId = User.Identity.GetUserId(); int Id = db.User.Where(u => u.idAspNetUsers == userId).FirstOrDefault().Id; Admin admin = db.Admin.FirstOrDefault(); if (number == 1) { order.TypeOfTokens = "SYLVER"; order.NumberOfTokens = admin.SilverPackTokens; order.PackagePrice = admin.SilverPackTokens * admin.ValueOfToken; } if (number == 2) { order.TypeOfTokens = "GOLD"; order.NumberOfTokens = admin.GoldPackTokens; order.PackagePrice = admin.GoldPackTokens * admin.ValueOfToken; } if (number == 3) { order.TypeOfTokens = "PLATINUM"; order.NumberOfTokens = admin.PlatinumPackTokens; order.PackagePrice = admin.PlatinumPackTokens * admin.ValueOfToken; } order.Id = Guid.NewGuid(); order.UserId = Id; order.Status = "SUBMITTED"; db.TokenOrder.Add(order); db.SaveChanges(); return(Redirect("http://stage.centili.com/payment/widget?apikey=162e68d0383d8eac6835fffac0759ec5&country=rs&reference=" + order.Id + "&returnurl=http://sm150089.azurewebsites.net/Token/CentiliReply")); }
public void PaymentProcessed(string clientId, string status) { using (var db = new AuctionHouseDB()) { using (var transaction = db.Database.BeginTransaction(IsolationLevel.Serializable)) { try { TokenOrder order = null; if (Guid.TryParse(clientId, out var id)) { order = db.FindTokenOrderByGuid(id); } if (order == null) { throw new TransactionException("Invalid payment id."); } if (order.Status != null) { throw new TransactionException("Payment already proccessed."); } order.Status = status == "success"; db.Entry(order).State = EntityState.Modified; var user = db.FindUserById(order.Buyer); decimal balance = -1; if (order.Status.Value) { user.Balance += order.Amount; balance = user.Balance; db.Entry(user).State = EntityState.Modified; } db.SaveChanges(); transaction.Commit(); try { AuctionHub.HubContext.Clients.All.onTokenOrderCompleted(order.Buyer.ToString(), order.ID.ToString(), balance, order.Status.Value); Mailer.SendMail(Settings.SMTPUsername, "Auction House", user.Email, user.FirstName + " " + user.LastName, "Auction House - Token Order", "Dear " + user.FirstName + "," + Environment.NewLine + Environment.NewLine + "This e-mail has been sent to inform you that your token order" + Environment.NewLine + "has been processed and marked as [" + (order.Status.Value ? "COMPLETE" : "FAILED") + "]." + Environment.NewLine + Environment.NewLine + "Please, do not reply to this e-mail as you will not get any response." + Environment.NewLine + Environment.NewLine + "Kind regards," + Environment.NewLine + "Auction House" ); } catch (Exception ex) { log.Error(ex.Message, ex); } } catch (TransactionException ex) { transaction.Rollback(); log.Warn(ex.Message, ex); } catch (Exception ex) { transaction.Rollback(); log.Error(ex.Message, ex); } } } }
public ActionResult BuyTokens(string package) { TokenOrder order = null; using (Entities db = new Entities()) { string userid = User.Identity.GetUserId(); var token = db.Token.FirstOrDefault(); int tokenNumber = 0; switch (package) { case "silver": tokenNumber = (int)token.NumS; break; case "gold": tokenNumber = (int)token.NumG; break; case "premium": tokenNumber = (int)token.NumP; break; default: return(RedirectToAction("Index")); } decimal price = 0; switch (token.ActiveCurrency) { case "RSD": price = tokenNumber * (decimal)token.RSD; break; case "USD": price = tokenNumber * (decimal)token.USD; break; case "EUR": price = tokenNumber * (decimal)token.EUR; break; } order = new TokenOrder() { GUID = Guid.NewGuid(), IdUser = userid, TokenNum = tokenNumber, Status = "SU", PackageP = price }; db.TokenOrder.Add(order); db.SaveChanges(); } string url = "https://stage.centili.com/widget/WidgetModule?api=589838e3b63aa93505034f3563b32c42&clientid=" + order.GUID.ToString() + "&amount=" + ((decimal)(order.PackageP)).ToString("0.##") + "&country=rs&theme=black"; return(Redirect(url)); //string[] paramsn = //{ // "apikey", "country", "reference", "price", "returnurl", "theme" //}; //string[] vals = //{ // "589838e3b63aa93505034f3563b32c42", "rs", order.GUID.ToString(), ((decimal)(order.PackageP)).ToString("0.##"), "http://localhost:50065", "black" //}; //string url = "http://api.centili.com/api/payment/1_4/transaction"; //object jsonobj = new { apikey = "589838e3b63aa93505034f3563b32c42", msisdn = "381658203636", country = "rs", reference = order.GUID.ToString(), price = ((decimal)(order.PackageP)).ToString("0.##"), returnurl = "http://localhost:50065", theme = "black"}; //string json = new JavaScriptSerializer().Serialize(jsonobj); //HttpPost2(url, json); //return RedirectToAction("Home", "Index", null); }
public ActionResult Notify(string reference, string status) { using (var ctx = new AuctionModel()) { using (var transaction = ctx.Database.BeginTransaction(IsolationLevel.Serializable)) { try { TokenOrder order = ctx.FindTokenOrderByID(reference); if (order == null) { throw new Exception("Invalid order. ID = " + reference); } if (order.State != 0) { throw new Exception("Order already processed. ID = " + reference); } switch (status) { case "success": order.State = 1; break; case "failed": order.State = 2; break; case "canceled": order.State = 2; break; } User user = ctx.FindUserByID(order.Buyer.ToString()); if (order.State == 1) { user.TokenAmount += order.TokenAmount; } ctx.SaveChanges(); transaction.Commit(); AuctionHub.HubContext.Clients.All.onNotify(user.ID.ToString(), order.ID.ToString(), order.State, user.TokenAmount.ToString("F4")); try { Utility.SendEmail(user.Email, "Transaction processed #" + reference, "Hello " + user.FirstName + "," + Environment.NewLine + Environment.NewLine + "Your transaction #" + order.ID.ToString() + " has been processed." + Environment.NewLine + (order.State == 1 ? "Status: COMPLETED" : "Status: CANCELED") + Environment.NewLine + Environment.NewLine + "Sincerely, " + Environment.NewLine + "The Auction Website Team" ); } catch (Exception e) { logger.Error(e.Message); } } catch (Exception e) { logger.Error(e.Message); transaction.Rollback(); ViewBag.ErrorMsg = "Internal server error."; return(View("Error")); } } } return(RedirectToAction("Profile")); }