Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        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));
        }