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);
                    }
                }
            }
        }