private ReturnObject AddSendTransactionToBlockchainAddress(UserSendTransaction sendTransaction)
        {
            try
            {
                using (var walletRepository = new WalletRepository(_connectionDb))
                {
                    var walletBusiness =
                        new WalletBusiness.WalletBusiness(_vakapayRepositoryFactory, false);

                    var wallet =
                        walletRepository.FindByUserAndNetwork(sendTransaction.UserId, sendTransaction.Currency);
                    if (wallet == null)
                    {
                        return(new ReturnObject()
                        {
                            Status = Status.STATUS_ERROR,
                            Message =
                                $"UserId {sendTransaction.UserId} with {sendTransaction.Currency} wallet is not found!"
                        });
                    }

                    var res = walletBusiness.Withdraw(wallet, sendTransaction.To, sendTransaction.Amount,
                                                      sendTransaction.PricePerCoin, sendTransaction.Description);
                    return(res);
                }
            }
            catch (Exception e)
            {
                _logger.Error(e.Message);
                throw;
            }
        }
        public ReturnObject AddSendTransaction(UserSendTransaction sendTransaction)
        {
            try
            {
                if (!string.IsNullOrEmpty(sendTransaction.Idem))
                {
                    using (var sendTransactionRepository = new UserSendTransactionRepository(_connectionDb))
                    {
                        var idem = sendTransactionRepository.FindExistedIdem(sendTransaction);
                        if (idem != null)
                        {
                            return(new ReturnObject()
                            {
                                Status = Status.STATUS_ERROR,
                                Message = $"Transaction with idem = {sendTransaction.Idem} is already existed!"
                            });
                        }
                    }
                }

                var walletBusiness = new WalletBusiness.WalletBusiness(_vakapayRepositoryFactory, false);

                var valid = walletBusiness.ValidateWithdrawAmount(sendTransaction.UserId,
                                                                  sendTransaction.SendByBlockchainAddress, sendTransaction.Amount, sendTransaction.Fee,
                                                                  sendTransaction.Currency);

                if (valid.Status == Status.STATUS_ERROR)
                {
                    return(valid);
                }

                if (sendTransaction.SendByBlockchainAddress)
                {
                    return(AddSendTransactionToBlockchainAddress(sendTransaction));
                }
                else
                {
                    return(AddSendTransactionToEmailAddress(sendTransaction));
                }
            }
            catch (Exception e)
            {
                _logger.Error(e.Message);
                return(new ReturnObject()
                {
                    Status = Status.STATUS_ERROR,
                    Message = e.Message
                });
            }
        }
示例#3
0
        public ReturnObject AddSendTransaction(UserSendTransaction request)
        {
            var sendTransactionBusiness =
                new UserSendTransactionBusiness.UserSendTransactionBusiness(_repositoryFactory);
            ReturnObject result = null;

            try
            {
                var res = sendTransactionBusiness.AddSendTransaction(request);

                if (res.Status == Status.STATUS_ERROR)
                {
                    result = new ReturnObject()
                    {
                        Status = Status.STATUS_ERROR, Message = res.Message
                    };
                }
                else
                {
                    result = new ReturnDataObject()
                    {
                        Status = Status.STATUS_SUCCESS, Data = request
                    };
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                result = new ReturnObject()
                {
                    Status = Status.STATUS_ERROR, Message = e.Message
                };
            }
            finally
            {
                sendTransactionBusiness.CloseDbConnection();
            }

            return(result);
        }
        private ReturnObject AddSendTransactionToEmailAddress(UserSendTransaction sendTransaction)
        {
            if (_connectionDb.State != ConnectionState.Open)
            {
                _connectionDb.Open();
            }


            using (var userRepository = new UserRepository(_connectionDb))
            {
                var sender   = userRepository.FindById(sendTransaction.UserId);
                var receiver = userRepository.FindByEmailAddress(sendTransaction.To);

                if (sender == null)
                {
                    return(new ReturnObject()
                    {
                        Status = Status.STATUS_ERROR,
                        Message = "Sender UserID not found in Vakapay system"
                    });
                }

                if (receiver == null)
                {
                    return(new ReturnObject()
                    {
                        Status = Status.STATUS_ERROR,
                        Message = "Email address not found in Vakapay system"
                    });
                }


                using (var sendTransactionRepository = new UserSendTransactionRepository(_connectionDb))
                {
                    var insertTrx = _connectionDb.BeginTransaction();
                    var insertRes = sendTransactionRepository.Insert(sendTransaction);

                    if (insertRes.Status == Status.STATUS_ERROR)
                    {
                        insertTrx.Rollback();
                        return(insertRes);
                    }

                    var internalTransactions = new InternalWithdrawTransaction()
                    {
                        SenderUserId   = sendTransaction.UserId,
                        ReceiverUserId = receiver.Id,
                        Amount         = sendTransaction.Amount,
                        PricePerCoin   = sendTransaction.PricePerCoin,
                        Currency       = sendTransaction.Currency,
                        Idem           = sendTransaction.Idem,
                        Description    = sendTransaction.Description
                    };

                    using (var internalTransactionsRepository = new InternalTransactionsRepository(_connectionDb))
                    {
                        insertRes = internalTransactionsRepository.Insert(internalTransactions);

                        if (insertRes.Status == Status.STATUS_ERROR)
                        {
                            insertTrx.Rollback();
                            return(insertRes);
                        }

                        insertTrx.Commit();

                        var sendTrx = _connectionDb.BeginTransaction();
                        var senRes  = SendInternalTransaction(internalTransactions);
                        if (senRes.Status == Status.STATUS_ERROR)
                        {
                            sendTrx.Rollback();
                            internalTransactionsRepository.Update(internalTransactions);
                            return(senRes);
                        }

                        var updateRes = internalTransactionsRepository.Update(internalTransactions);


                        if (updateRes.Status == Status.STATUS_ERROR)
                        {
                            sendTrx.Rollback();
                            return(new ReturnObject()
                            {
                                Status = Status.STATUS_ERROR,
                                Message = "Fail to update send status"
                            });
                        }


                        sendTrx.Commit();


                        var email = sender.Email;
                        if (email != null)
                        {
                            var res = SendMailBusiness.SendMailBusiness.CreateDataEmail(
                                "Notify send " + sendTransaction.Currency,
                                email, internalTransactions.Amount, internalTransactions.Id,
                                EmailTemplate.Sent, internalTransactions.Currency, _vakapayRepositoryFactory, true);
                            res.Wait();
                        }

                        var receiverEmail = receiver.Email;
                        if (receiverEmail != null)
                        {
                            var res = SendMailBusiness.SendMailBusiness.CreateDataEmail(
                                "Notify receive " + sendTransaction.Currency, receiverEmail,
                                internalTransactions.Amount,
                                internalTransactions.Id, EmailTemplate.ReceivedInternal, internalTransactions.Currency,
                                _vakapayRepositoryFactory, true);
                            res.Wait();
                        }

                        return(new ReturnObject()
                        {
                            Status = Status.STATUS_SUCCESS,
                            Message = "Transaction Sent!"
                        });
                    }
                }
            }
        }
示例#5
0
        public string VerifyCodeTransaction([FromBody] JObject value)
        {
            try
            {
                var userModel = (User)RouteData.Values[ParseDataKeyApi.KEY_PASS_DATA_USER_MODEL];


                var code   = "";
                var codeGG = "";
                if (value.ContainsKey(ParseDataKeyApi.KEY_TWO_FA_VERIFY_CODE_TRANSACTION_SMS))
                {
                    code = value[ParseDataKeyApi.KEY_TWO_FA_VERIFY_CODE_TRANSACTION_SMS].ToString();
                }
                if (value.ContainsKey(ParseDataKeyApi.KEY_TWO_FA_VERIFY_CODE_TRANSACTION_2FA))
                {
                    codeGG = value[ParseDataKeyApi.KEY_TWO_FA_VERIFY_CODE_TRANSACTION_2FA].ToString();
                }

                bool isVerify = false;

                switch (userModel.IsTwoFactor)
                {
                case 1:
                    if (!value.ContainsKey(ParseDataKeyApi.KEY_TWO_FA_VERIFY_CODE_TRANSACTION_SMS))
                    {
                        return(HelpersApi.CreateDataError(MessageApiError.PARAM_INVALID));
                    }

                    isVerify = HelpersApi.CheckCodeGoogle(userModel.TwoFactorSecret, codeGG);
                    break;

                case 2:
                    if (!value.ContainsKey(ParseDataKeyApi.KEY_TWO_FA_VERIFY_CODE_TRANSACTION_SMS))
                    {
                        return(HelpersApi.CreateDataError(MessageApiError.PARAM_INVALID));
                    }

                    var secretAuthToken = ActionCode.FromJson(userModel.SecretAuthToken);
                    if (string.IsNullOrEmpty(secretAuthToken.SendTransaction))
                    {
                        return(HelpersApi.CreateDataError(MessageApiError.SMS_VERIFY_ERROR));
                    }

                    isVerify = HelpersApi.CheckCodeSms(secretAuthToken.SendTransaction, code, userModel);
                    break;

                case 0:
                    isVerify = true;
                    break;
                }

                if (!isVerify)
                {
                    return(HelpersApi.CreateDataError(MessageApiError.SMS_VERIFY_ERROR));
                }

                // userModel.Verification = (int) option;

                // su ly data gui len
                //to do

                var request = value.ToObject <SendTransaction>();

                var userRequest = new UserSendTransaction()
                {
                    UserId = userModel.Id,
                    Type   = "send",
                    To     = request.Detail.SendByAd
                        ? request.Detail.RecipientWalletAddress
                        : request.Detail.RecipientEmailAddress,
                    SendByBlockchainAddress = request.Detail.SendByAd,
                    Amount       = request.Detail.VkcAmount,
                    PricePerCoin = request.Detail.PricePerCoin,
                    Currency     = request.NetworkName,
                    Description  = request.Detail.VkcNote,
                };
                ReturnObject result = null;
                result = AddSendTransaction(userRequest);

                return(JsonHelper.SerializeObject(result));
            }
            catch (Exception e)
            {
                return(HelpersApi.CreateDataError(e.Message));
            }
        }