Ejemplo n.º 1
0
        public ActionResult Payment([FromBody] BalanceInput input)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var user = accountService.GetCurrentUserForContext(HttpContext);

            if (user == null || user.Id != input.UserId)
            {
                // User should only be able to alter its own balance
                return(Unauthorized());
            }

            var transaction = new BalanceTransaction {
                UserId = user.Id, Amount = input.Amount
            };

            dbcontext.BalanceTransaction.Add(transaction);

            user.Balance += transaction.Amount;
            dbcontext.Update(user);

            dbcontext.SaveChanges();

            return(Ok());
        }
Ejemplo n.º 2
0
        internal static BalanceTransaction TransformStripeBalanceTransactionToBalanceTransaction(StripeBalanceTransaction stripeBalanceTransaction)
        {
            try
            {
                var balanceTransaction = new BalanceTransaction
                {
                    BalanceTransactionID = stripeBalanceTransaction.Id,
                    Amount = Sahara.Core.Common.Methods.Billing.ConvertStripeAmountToDecimals(stripeBalanceTransaction.Amount.ToString()),
                    Net    = Sahara.Core.Common.Methods.Billing.ConvertStripeAmountToDecimals(stripeBalanceTransaction.Net.ToString()),
                    Fee    = Sahara.Core.Common.Methods.Billing.ConvertStripeAmountToDecimals(stripeBalanceTransaction.Fee.ToString()),

                    Type   = stripeBalanceTransaction.Type,
                    Status = stripeBalanceTransaction.Status,

                    Created   = stripeBalanceTransaction.Created,
                    Available = stripeBalanceTransaction.AvailableOn
                };

                if (balanceTransaction.Type == "transfer")
                {
                    balanceTransaction.Amount = Math.Abs(balanceTransaction.Amount);
                    balanceTransaction.Net    = Math.Abs(balanceTransaction.Net);
                }

                return(balanceTransaction);
            }
            catch
            {
                return(null);
            }
        }
Ejemplo n.º 3
0
        public static balanceTransaction Map(this balanceTransaction uiTransaction, BalanceTransaction dbTransaction)
        {
            uiTransaction.balanceTransactionID = dbTransaction.BalanceTransactionID;
            uiTransaction.transactionDate      = dbTransaction.TransactionDate.ToString();
            uiTransaction.incomingAmount       = dbTransaction.IncomingAmount;
            uiTransaction.outgoingAmount       = dbTransaction.OutgoingAmount;
            uiTransaction.outstandingBalance   = dbTransaction.OutstandingBalance;
            uiTransaction.comments             = dbTransaction.Description;
            uiTransaction.transactionTypeID    = dbTransaction.TransactionTypeID;
            uiTransaction.customerID           = dbTransaction.CustomerID;
            if (dbTransaction.TransactionTypeID == (int)TransactionTypeEnum.Cheque)
            {
                uiTransaction.chequeDate          = dbTransaction.ChequeDate.ToString();
                uiTransaction.chequeCustomerName  = dbTransaction.ChequeCustomerName;
                uiTransaction.chequeIssuerBank    = dbTransaction.ChequeIssuerBank;
                uiTransaction.chequeNumber        = dbTransaction.ChequeNumber;
                uiTransaction.chequeStatusID      = dbTransaction.ChequeStatusID;
                uiTransaction.chequeDepositedDate = dbTransaction.ChequeDepositedDate.HasValue ? dbTransaction.ChequeDepositedDate.Value.ToString() : string.Empty;
                //uiTransaction.isChequePassed = dbTransaction.IsChequePassed;
                uiTransaction.chequeActionDate = dbTransaction.ChequeActionDate.HasValue? dbTransaction.ChequeActionDate.Value.ToString():string.Empty;
                //uiTransaction.isChequeFailed = dbTransaction.IsChequeFailed;
                uiTransaction.chequeFailureComments = dbTransaction.ChequeFailureComments;
            }
            else if (dbTransaction.TransactionTypeID == (int)TransactionTypeEnum.Online)
            {
                uiTransaction.onlineReferernceID = dbTransaction.OnlineReferernceID;
            }
            if (dbTransaction.Customer != null)
            {
                uiTransaction.customer = new customer().Map(dbTransaction.Customer);
            }

            return(uiTransaction);
        }
Ejemplo n.º 4
0
        public async Task <IActionResult> UpdateTransaction(Transaction transaction)
        {
            int      accountId = 0;
            double   newAmount = transaction.TransactionAmount;
            DateTime newDate   = transaction.TransactionDate;

            transaction = await _context.Transactions.FirstOrDefaultAsync(tran => tran.Id == transaction.Id);

            List <BalanceTransaction> affectedBalances = await _context.BalanceTransactions.Where(bt => bt.TransactionId == transaction.Id).ToListAsync();

            affectedBalances.ForEach(b => {
                Balance balance         = _context.Balances.FirstOrDefault(bal => bal.Id == b.BalanceId);
                accountId               = balance.AccountNumber;
                balance.BalanceAmount  -= transaction.TransactionAmount;
                b.Balance               = null;
                _context.Entry(b).State = EntityState.Modified;
                _context.Remove(b);
            });


            Account        account  = _context.Accounts.Single(account => account.Id == accountId);
            List <Balance> balanses = _context.Balances.Where(b =>
                                                              b.BalanceDate >= newDate && b.Account.Id == account.Id).ToList();

            if (balanses.Count != 0)
            {
                balanses.ForEach(b =>
                {
                    b.BalanceAmount += newAmount;
                    BalanceTransaction balanceTransaction = new BalanceTransaction
                    {
                        Balance       = b,
                        Transaction   = transaction,
                        BalanceId     = b.Id,
                        TransactionId = transaction.Id
                    };
                    if (b.BalanceTransactions == null)
                    {
                        b.BalanceTransactions = new List <BalanceTransaction>();
                    }
                    b.BalanceTransactions.Add(balanceTransaction);
                    _context.Entry(b).State = EntityState.Modified;
                });
            }
            else
            {
                transaction.IsFuture              = true;
                transaction.AccountId             = account.Id;
                _context.Entry(transaction).State = EntityState.Modified;
            }
            transaction.TransactionAmount     = newAmount;
            transaction.TransactionDate       = newDate;
            _context.Entry(transaction).State = EntityState.Modified;
            await _context.SaveChangesAsync();

            return(Ok(account.Id));
        }
Ejemplo n.º 5
0
        /// <summary>
        ///
        /// 本示例介绍对余额提现和查看用户余额明细对象/对象列表
        /// 余额的消费、退款请查看 OrderDemo 示例
        /// 查看用户当前余额请使用查看 User 对象接口
        ///
        /// </summary>
        public static void Example(string appId)
        {
            var uid      = "test_user_001";
            var orParams = new Dictionary <string, object>
            {
                { "app", appId },
                { "uid", uid },
                { "merchant_order_no", new Random().Next(1, 999999999) },
                { "channel", "wx" }, // 充值接口需要设置支付渠道
                { "amount", 1 },
                { "currency", "cny" },
                { "client_ip", "127.0.0.1" },
                { "subject", "Your Subject" },
                { "body", "Your Body" },
                { "description", "Your description" },
            };

            var wdParams = new Dictionary <string, object>
            {
                { "amount", 1 },
                { "order_no", "20160829133002" },
                { "description", "withdraw request" },
                { "extra", new Dictionary <string, object>
                  {
                      { "card_number", "6225210207073918" },
                      { "user_name", "姓名" },
                      { "open_bank_code", "0102" },
                      { "prov", "上海" },
                      { "city", "上海" }
                  } },
            };

            Console.WriteLine("****创建提现 Withdrawal 对象(发起提现申请)****");
            var wd = Withdrawal.Request(appId, wdParams);

            Console.WriteLine(wd);
            Console.WriteLine();

            Console.WriteLine("****提现完成 Withdrawal 对象****");
            Console.WriteLine(Withdrawal.Confirm(appId, wd.Id));
            Console.WriteLine();

            Console.WriteLine("****查看用户交易明细 Balance Transaction 对象列表****");
            var balanceList = BalanceTransaction.List(appId);

            Console.WriteLine(balanceList);
            Console.WriteLine();

            Console.WriteLine("****查看用户交易明细 Balance Transaction 对象****");
            Console.WriteLine(BalanceTransaction.Retrieve(appId, balanceList.Data.First().Id));
            Console.WriteLine();
        }
        /// <summary>
        /// 本示例展示 用户账户交易明细 查询列表,明细
        /// </summary>
        /// <param name="appId"></param>
        public static void Example(string appId)
        {
            var listParams = new Dictionary <string, object>
            {
                { "page", 1 },
                { "per_page", 10 },
            };

            var list = BalanceTransaction.List(appId, listParams);

            Console.WriteLine("****查询 balance_transactions 列表****");
            Console.WriteLine(list);
            Console.WriteLine();


            Console.WriteLine("****查询 balance_transactions 明细****");
            Console.WriteLine(BalanceTransaction.Retrieve(appId, "310217032213081700008201"));
            Console.WriteLine();
        }
Ejemplo n.º 7
0
        public async Task <IActionResult> Post(int accountId, Transaction transaction)
        {
            Account        account  = _context.Accounts.Single(account => account.Id == accountId);
            List <Balance> balanses = _context.Balances.Where(b =>
                                                              b.BalanceDate >= transaction.TransactionDate && b.Account.Id == account.Id).ToList();

            if (balanses.Count != 0)
            {
                balanses.ForEach(b =>
                {
                    b.BalanceAmount += transaction.TransactionAmount;
                    BalanceTransaction balanceTransaction = new BalanceTransaction
                    {
                        Balance       = b,
                        Transaction   = transaction,
                        BalanceId     = b.Id,
                        TransactionId = transaction.Id
                    };
                    if (b.BalanceTransactions == null)
                    {
                        b.BalanceTransactions = new List <BalanceTransaction>();
                    }
                    b.BalanceTransactions.Add(balanceTransaction);
                    _context.Entry(b).State = EntityState.Modified;
                });
            }
            else
            {
                transaction.IsFuture  = true;
                transaction.AccountId = account.Id;
                _context.Transactions.Add(transaction);
            }

            _context.Attach(account);
            await _context.SaveChangesAsync();

            return(Ok(account.Id));
        }
Ejemplo n.º 8
0
        public static BalanceTransaction Map(this BalanceTransaction dbTransaction, balanceTransaction uiTransaction, bool isEdit)
        {
            DateTime transactionDate;

            if (DateTime.TryParse(uiTransaction.transactionDate, out transactionDate))
            {
                dbTransaction.TransactionDate = transactionDate;
            }
            else
            {
                dbTransaction.TransactionDate = DateTime.Now;
            }
            dbTransaction.IncomingAmount    = uiTransaction.incomingAmount;
            dbTransaction.OutgoingAmount    = uiTransaction.outgoingAmount;
            dbTransaction.TransactionTypeID = uiTransaction.transactionTypeID;
            dbTransaction.Description       = uiTransaction.comments;

            if (uiTransaction.transactionTypeID == (int)TransactionTypeEnum.Cheque)
            {
                DateTime chequeDate;
                if (DateTime.TryParse(uiTransaction.chequeDate, out chequeDate))
                {
                    dbTransaction.ChequeDate = chequeDate;
                }
                dbTransaction.ChequeNumber       = uiTransaction.chequeNumber;
                dbTransaction.ChequeCustomerName = uiTransaction.chequeCustomerName;
                dbTransaction.ChequeIssuerBank   = uiTransaction.chequeIssuerBank;
                dbTransaction.ChequeStatusID     = (int)ChequeStatusEnum.NotInitiated;
                dbTransaction.OnlineReferernceID = null;
            }
            else if (uiTransaction.transactionTypeID == (int)TransactionTypeEnum.Online)
            {
                dbTransaction.OnlineReferernceID = uiTransaction.onlineReferernceID;
                dbTransaction.ChequeDate         = null;
                dbTransaction.ChequeNumber       = null;
                dbTransaction.ChequeCustomerName = null;
                dbTransaction.ChequeIssuerBank   = null;
                dbTransaction.ChequeStatusID     = null;
            }
            else
            {
                dbTransaction.ChequeDate         = null;
                dbTransaction.ChequeNumber       = null;
                dbTransaction.ChequeCustomerName = null;
                dbTransaction.ChequeIssuerBank   = null;
                dbTransaction.ChequeStatusID     = null;
                dbTransaction.OnlineReferernceID = null;
            }

            if (isEdit)
            {
                dbTransaction.LastUpdatedDateTime = DateTime.Now;
            }
            else
            {
                dbTransaction.CreatedDateTime = DateTime.Now;
                //dbTransaction.CustomerID = uiTransaction.customerID;
            }

            return(dbTransaction);
        }