public IActionResult AddCredit([FromBody] CreditRecharge recharge)
        {
            byte[]      encryptedTicketInNDEFMessage;
            SmartTicket ticket = _dbContext.SmartTickets.Find(recharge.TicketId);

            // Add online payments logic here to authorize the balance increase
            if (ticket != null)
            {
                try
                {
                    ticket.Credit += recharge.Amount;
                    EncryptableSmartTicket encryptableTicket = Utility.ConvertToEncryptableSmartTicket(ticket);
                    byte[] encryptedTicket = TicketEncryption.EncryptTicket(encryptableTicket, TicketEncryption.GetPaddedIV(encryptableTicket.CardID));
                    encryptedTicketInNDEFMessage = new NDEFMessage(encryptedTicket, NDEFRecordType.Types.Text).GetFormattedBlock();
                    _dbContext.SaveChanges();
                    _dbContext.CreditTransactions.Add(new CreditTransaction()
                    {
                        Amount = recharge.Amount, CardId = recharge.TicketId, Date = DateTime.Now, Location = "online"
                    });
                    _dbContext.SaveChanges();
                }
                catch (Exception ex)
                {
                    return(StatusCode(500, ex.Message));
                }
                return(Ok(encryptedTicketInNDEFMessage));
            }
            else
            {
                return(StatusCode((int)HttpStatusCode.InternalServerError, "The ticket has not been found."));
            }
        }
        public IActionResult CreateVirtualTicket()
        {
            byte[]      encryptedTicketInNDEFMessage = new byte[] { };
            SmartTicket virtualTicket = null;

            if (!_dbContext.SmartTickets.Any(s => s.Username == User.Identity.Name && s.Virtual && !s.Deactivated))
            {
                try
                {
                    byte[] virtualTicketId = Guid.NewGuid().ToByteArray();
                    virtualTicket = new SmartTicket()
                    {
                        CardId = BitConverter.ToString(virtualTicketId), Credit = 0, TicketType = "BIT", Username = User.Identity.Name, Virtual = true, UsageTimestamp = DateTime.Now, Deactivated = false
                    };
                    byte[] encryptedTicket = TicketEncryption.EncryptTicket(Utility.ConvertToEncryptableSmartTicket(virtualTicket), TicketEncryption.GetPaddedIV(virtualTicketId));
                    encryptedTicketInNDEFMessage = new NDEFMessage(encryptedTicket, NDEFRecordType.Types.Text).GetFormattedBlock();
                    _dbContext.SmartTickets.Add(virtualTicket);
                    _dbContext.SaveChanges();
                }
                catch (Exception ex)
                {
                    return(StatusCode((int)HttpStatusCode.InternalServerError, ex.Message));
                }
                return(Ok(BitConverter.ToString(encryptedTicketInNDEFMessage)));
            }
            return(StatusCode((int)HttpStatusCode.InternalServerError, "The user already has an associated virtual ticket"));
        }
示例#3
0
        public UserInfo login(loginParam param)
        {
            if (param.user == "admin" && param.password == "123456")
            {
                //添加测试用户信息
                UserInfo u = new UserInfo()
                {
                    useName  = "admin",
                    trueName = "张三",
                    id       = 1001,
                    guid     = "73e01eab-210d-4d19-a72a-d0d64e053ec0",
                    client   = param.client
                };
                //登录成功产生一个ticket
                u.ticket = TicketEncryption.GenerateTicket(u.guid, param.client.ToString());
                string redisKey = "ticket_" + u.guid;
                //保存登录信息到redis
                _redisHelper.Set <UserInfo>(redisKey, u, TimeSpan.FromDays(3));

                return(u);
            }
            return(null);
        }