/// <summary> /// 企业付款到银行卡https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_2 /// </summary> /// <param name="request"></param> public PayBankResponse PayBank(PayBankRequest request) { var response = new PayBankResponse() { return_code = "FAI" }; string requestUrl = "https://api.mch.weixin.qq.com/mmpaysptrans/pay_bank"; PayBankImpl payBank = new PayBankImpl() { apiKey = request.apiKey }; payBank.Add("mch_id", request.mch_id); payBank.Add("nonce_str", request.desc); payBank.Add("amount", request.amount.ToString()); payBank.Add("bank_code", request.bank_code); payBank.Add("account_type", request.account_type.ToString()); payBank.Add("bank_note", request.bank_note); payBank.Add("desc", request.desc); payBank.Add("enc_bank_no", request.enc_bank_no); payBank.Add("enc_true_name", request.enc_true_name); payBank.Add("partner_trade_no", request.partner_trade_no); var sign = payBank.CreateMd5Sign(); payBank.Add("sign", sign); var data = new HttpUtils().DoPost(requestUrl, payBank.ParseXML(), request.isUseCert, request.cert, request.password); var doc = new XmlDocument(); doc.LoadXml(data); XmlNode xmlNode = doc.DocumentElement; if (xmlNode != null) { response.return_code = xmlNode["return_code"].InnerText; if (response.return_code.ToUpper() != "SUCCESS") { response.return_msg = xmlNode["return_msg"].InnerText; return(response); } response.result_code = xmlNode["result_code"].InnerText; if (response.result_code.ToUpper() == "FAIL") { response.err_code = xmlNode["err_code"].InnerText; response.err_code_des = xmlNode["err_code_des"].InnerText; return(response); } response.return_code = "SUCCESS"; } return(response); }
/// <summary> /// 提现到银行卡 /// </summary> /// <param name="request"></param> /// <returns></returns> public async Task <PayBankResponse> PayBank(PayBankRequest request) { // 获取Rsa值 // var wxRequest = new WeChatPayRiskGetPublicKeyRequest(); // var response = await _client.ExecuteAsync(wxRequest, _wechatPayOption); var result = new PayBankResponse(); var wxRequest = new WeChatPayPayBankRequest { PartnerTradeNo = request.PartnerTradeNo, BankNo = request.BankNo, TrueName = request.TrueName, BankCode = request.BankCode, Amount = request.Amount, Desc = request.Desc }; try { var response = await _client.ExecuteAsync(wxRequest, _wechatPayOption); if (response.ReturnCode == WeChatPayCode.Success) { if (response.ResultCode == WeChatPayCode.Success) { result.IsSuccess = true; } result.Message = response.ErrCodeDes; } else { result.Message = response.ReturnMsg; } } catch (Exception ex) { result.Message = ex.Message; } return(result); }
public async Task <Result> PayBank([FromBody] WithdrawalPayBankRequest request) { var userId = HttpContext.GetUserId(); var bankCard = await _bankCardRepository.FirstOrDefaultAsync(request.Id); // var user = await _customerRepository.Query().Include(e => e.Assets).FirstOrDefaultAsync(e => e.Id == userId); var assets = await _assetsRepository.Query().FirstOrDefaultAsync(e => e.CustomerId == userId); if (assets == null) { return(Result.Fail(ResultCodes.RequestParamError, "可提现金额不足")); } if (assets.AvailableAmount <= 0) { return(Result.Fail(ResultCodes.RequestParamError, "可提现金额不足")); } if (assets.AvailableAmount < request.Amount) { return(Result.Fail(ResultCodes.RequestParamError, "金额不足")); } if (request.Amount < 100000) { return(Result.Fail(ResultCodes.RequestParamError, "金额不足1000,不可提现")); } var reservedAmount = (int)(request.Amount * 0.2); //保留20%的金额 var amount = request.Amount - reservedAmount; //提现金额 var handlingFee = (int)(request.Amount * 0.001); //微信手续费0.1% if (handlingFee < 100) { handlingFee = 100; } else if (handlingFee > 2500) { handlingFee = 2500; } string partnerTradeNo = DateTime.Now.ToString("yyyyMMdd") + GenerateHelper.GenOrderNo(); var payBankRequest = new PayBankRequest { PartnerTradeNo = partnerTradeNo, Amount = request.Amount, BankCode = bankCard.BankCode, BankNo = bankCard.BankNo, Desc = "提现", TrueName = bankCard.Name }; var payBankResult = await _paymentService.PayBank(payBankRequest); var withdrawalHistory = new WithdrawalHistory { CustomerId = bankCard.CustomerId, Name = bankCard.Name, BankCode = bankCard.BankCode, BankNo = bankCard.BankNo, Amount = amount, ReservedAmount = reservedAmount - reservedAmount, Status = payBankResult.IsSuccess ? WithdrawalStatus.Success : WithdrawalStatus.Failed, Message = payBankResult.Message, PartnerTradeNo = partnerTradeNo, Total = request.Amount, HandlingFee = handlingFee, Createat = DateTime.Now }; _withdrawalHistoryRepository.Insert(withdrawalHistory, false); using (var transaction = _withdrawalHistoryRepository.BeginTransaction()) { await _withdrawalHistoryRepository.SaveAsync(); if (payBankResult.IsSuccess) { await _customerManager.UpdateAssets(assets, -request.Amount, reservedAmount - reservedAmount, "提现"); } transaction.Commit(); } return(Result.Ok(payBankResult)); }