public async Task <OnchainResponse> CashoutAsync(CashoutModel data) { var request = new CashoutRequest(data.TransactionId, data.DestinationAddress, data.AssetId, data.Amount); var response = await _apiClient.ApiEnqueueTransactionCashoutPostAsync(request); return(PrepareOnchainResult(response)); }
public async Task <IActionResult> Cashout([FromBody] CashoutRequest model) { model.DestinationAddress = model.DestinationAddress.Trim('\n', ' ', '\t'); if (model.Amount <= 0) { throw new BackendException("Amount can't be less or equal to zero", ErrorCode.BadInputParameter); } await ValidateAddress(model.DestinationAddress, false); var asset = await _assetRepository.GetItemAsync(model.Asset); if (asset == null) { throw new BackendException("Provided asset is missing in database", ErrorCode.AssetNotFound); } var transactionId = await _builder.AddTransactionId(model.TransactionId, $"Cashout: {model.ToJson()}"); if (OpenAssetsHelper.IsBitcoin(model.Asset)) { await _cashoutRequestRepository.CreateCashoutRequest(transactionId, model.Amount, model.DestinationAddress); } else { var assetSetting = await _assetSettingCache.GetItemAsync(asset.Id); var hotWallet = !string.IsNullOrEmpty(assetSetting.ChangeWallet) ? assetSetting.ChangeWallet : assetSetting.HotWallet; await _transactionQueueWriter.AddCommand(transactionId, TransactionCommandType.Transfer, new TransferCommand { Amount = model.Amount, SourceAddress = hotWallet, Asset = model.Asset, DestinationAddress = model.DestinationAddress }.ToJson()); } return(Ok(new TransactionIdResponse { TransactionId = transactionId })); }
/// <summary> /// 提现申请 /// </summary> /// <param name="request">参数</param> public JResult Cashout(CashoutRequest request) { var response = new JResult() { Status = false }; using (var tran = new TransactionProvider()) { try { //更新会员钱包(钱包金额-提现金额)(升级金额+提现金额/(如果是普通、区域、全国才除)2) if (Using <ICrCustomer>().UpdateWalletAmount(new UpdateWalletAmountRequest() { CustomerSysNo = request.CustomerSysNo, WalletAmount = request.WalletAmount, UpgradeFundAmount = request.UpgradeFundAmount }) <= 0) { throw new Exception("更新会员钱包失败"); } //添加提现记录 var amount = request.WalletAmount - request.UpgradeFundAmount; var model = new FnCashout() { CustomerSysNo = request.CustomerSysNo, RealName = request.Account, CashoutType = request.CashoutType, Amount = amount, Remarks = string.Format("提现金额:{0} 实际到账金额:{1} 升级基金:{2}", request.WalletAmount, request.WalletAmount - request.UpgradeFundAmount, request.UpgradeFundAmount), Status = amount < 200?FnEnum.CashoutStatus.完成.GetHashCode(): FnEnum.CashoutStatus.处理中.GetHashCode(),//FnEnum.CashoutStatus.处理中.GetHashCode() CreatedDate = DateTime.Now }; var cashoutSysNo = Using <IFnCashout>().Insert(model); if (cashoutSysNo <= 0) { throw new Exception("添加提现记录失败"); } if (amount < 200) { var result = FnCashoutApp.Instance.H5CashoutWeiXin(cashoutSysNo, request.CertPath); Log4Helper.WriteInfoLog("EC.H5 提现" + result.ToJson2(), "Cashout"); if (!result.Status) { throw new Exception(result.Message); } } tran.Commit(); response.Status = true; response.Message = "提现申请成功、等待管理员审核!"; } catch (Exception ex) { tran.Rollback(); response.Message = ex.Message; } finally { tran.Dispose(); } } return(response); }
public Task <CashoutResponse> CashoutAsync(CashoutRequest request) { return(_runner.RunWithDefaultErrorHandlingAsync(() => _cashoutApi.ExecuteAsync(request))); }
public JsonResult Cashout(CashoutRequest request) { var response = new JResult() { Status = false }; var result = VHelper.ValidatorRule( new Rule_Number(request.Amount.ToString(), "请输入提现金额!") ); if (!result.IsPass) { response.Status = false; response.Message = result.Message; return(Json(response, JsonRequestBehavior.AllowGet)); } lock (_lock) { Log4Helper.WriteInfoLog("EC.H5 提现" + result.ToJson2(), "Cashout"); //当前上下文 var context = CustomerContext.Context; if (context == null) { response.Message = "用户已超时、请重新登录﹗"; return(Json(response, JsonRequestBehavior.AllowGet)); } if (request.Amount <= 0) { response.Message = "提现金额不能为零﹗"; return(Json(response, JsonRequestBehavior.AllowGet)); } var periodList = FnCashoutApp.Instance.GetPeriodTimes(new FnCashoutQueryRequest() { CustomerSysNo = context.SysNo, StartTime = DateTime.Now.ToString("yyyy-MM-dd 00:00:00"), EndTime = DateTime.Now.ToString("yyyy-MM-dd 23:59:59") }); if (periodList != null && periodList.Any()) { response.Message = "每天只能提现一次﹗"; return(Json(response, JsonRequestBehavior.AllowGet)); } //提现金额判断(100元的倍数) //var remainder = request.Amount % 100; //if (remainder != 0) //{ // response.Message = "提现金额必须为100的倍数﹗"; // return Json(response, JsonRequestBehavior.AllowGet); //} if (request.Amount < 10) { response.Message = "提现金额必须为10元﹗"; return(Json(response, JsonRequestBehavior.AllowGet)); } //验证是否填写银行卡 if (request.CashoutType.Equals(FnEnum.CashoutType.银联.GetHashCode())) { if (context.Bank <= 0 && context.BankNumber == "") { response.Message = "请设置银行卡"; return(Json(response, JsonRequestBehavior.AllowGet)); } } if (context.WalletAmount >= request.Amount) { WeiXinProvider wx = new WeiXinProvider(); var certPath = Server.MapPath(@"\cert\apiclient_cert.p12"); decimal upgradeFundAmount = 0; if (!context.Grade.Equals(CustomerEnum.Grade.股东.GetHashCode())) { upgradeFundAmount = request.Amount / 2; } response = FnCashoutApp.Instance.Cashout(new CashoutRequest() { CustomerSysNo = context.SysNo, WalletAmount = request.Amount, UpgradeFundAmount = upgradeFundAmount, Account = context.Account, CashoutType = request.CashoutType, CertPath = certPath }); } else { response.Message = "当前余额不足﹗"; return(Json(response, JsonRequestBehavior.AllowGet)); } } return(Json(response, JsonRequestBehavior.AllowGet)); }