public async Task <DoPaymentResponse> DoPaymentAsync(DoPaymentRequest request) { DoPaymentResponse response = new DoPaymentResponse(); using (var unitOfWork = unitOfWorkFactory.Create()) { unitOfWork.Begin(); BankBin bankBin = await bankDomainService.GetValidBankBinByCardNumberAsync(unitOfWork, request.CardNumber); BankProvider bankProvider = await bankDomainService.GetValidBankProviderByBankIdAsync(unitOfWork, bankBin.BankId); Provider provider = await providerDomainService.GetValidProviderByIdAsync(unitOfWork, bankProvider.ProviderId); PaymentProvider paymentProvider = providerDomainService.GetValidPaymentProviderByType(provider.ProviderType); PaymentRequest paymentRequest = classMapper.Map <DoPaymentRequest, PaymentRequest>(request); paymentRequest.SetConfiguration(bankProvider.Configuration); paymentProvider.DoPaymentAsync(paymentRequest); unitOfWork.Commit(); } return(response); }
public async Task <BankBin> GetValidBankBinByCardNumberAsync(IUnitOfWork unitOfWork, string cardNumber) { if (string.IsNullOrEmpty(cardNumber) || cardNumber.Length < 16) { throw new BusinessException("Card number is not valid!"); } int binNumber = cardNumber.Substring(0, 6).xToInt(); if (binNumber <= 0) { throw new BusinessException("Card number bin is not valid!"); } BankBin bankBin = await bankBinRepository.GetByBinNumberAsync(unitOfWork, binNumber); if (bankBin is null) { throw new BusinessException("Bank not found by card number!"); } return(bankBin); }
public void GetBankBin() { ResultModel result = new ResultModel(); Dictionary <String, String> bankPath = new Dictionary <String, String>(); bankPath.Add("01020000", "3"); // 中国工商银行 bankPath.Add("01030000", "5"); // 中国农业银行 bankPath.Add("01040000", "2"); // 中国银行 bankPath.Add("01050000", "4"); // 中国建设银行 bankPath.Add("03100000", "7"); // 浦发银行 bankPath.Add("01000000", "16"); // 中国邮政银行 //bankPath.Add("03040000", "16"); // 华夏银行 bankPath.Add("03050000", "8"); // 民生银行 bankPath.Add("03060000", "14"); // 广东发展银行 bankPath.Add("03070000", "15"); // 平安银行 bankPath.Add("03030000", "10"); // 光大银行 bankPath.Add("03080000", "1"); // 招商银行 bankPath.Add("03090000", "9"); // 兴业银行 bankPath.Add("03020000", "13"); // 中信银行 bankPath.Add("03010000", "6"); // 交通银行 bankPath.Add("04031000", "12"); // 北京银行 string strCardNo = Context.Request["CardNo"]; Guid userId = WebUserAuth.UserId.Value; if (string.IsNullOrEmpty(strCardNo)) { result.status = 2; result.msg = "卡号不能为空"; } SortedDictionary <string, string> sParaTemp = new SortedDictionary <string, string>(); //var id = Guid.Parse("E27798C9-9301-4176-AC0B-6F3916F389EA"); //var webSetting = db.WebSetting.FirstOrDefault(x => x.Id == id); var webSetting = new WebSettingBLL().GetWebSettingInfo("E27798C9-9301-4176-AC0B-6F3916F389EA"); var partnerConfig = new PartnerConfig(webSetting.Param1Value, webSetting.Param2Value, webSetting.Param3Value, webSetting.Param4Value); string timestamp = PaymentUtil.GetCurrentDateTimeStr(); //基本请求参数 sParaTemp.Add("oid_partner", partnerConfig.OidPartner); sParaTemp.Add("sign_type", "RSA"); //业务参数 sParaTemp.Add("card_no", strCardNo); //卡号 //加签 string sign = PaymentUtil.AddSign(sParaTemp, partnerConfig.TraderPriKey, partnerConfig.MD5Key); sParaTemp.Add("sign", sign); var reqJson = PaymentUtil.DictToJson(sParaTemp); //LogEnum.Batchwithdraw.WriteLog("连连银行卡卡BIN查询-请求报文", "[" + reqJson + "]"); string responseJSON = postJson("https://yintong.com.cn/traderapi/bankcardquery.htm", reqJson); //LogEnum.Batchwithdraw.WriteLog("连连银行卡卡BIN查询-响应报文", "[" + responseJSON + "]"); SortedDictionary <string, string> sArray = JsonConvert.DeserializeObject <SortedDictionary <string, string> >(responseJSON); if (sArray.Count > 0) { //查询成功 if (sArray["ret_code"].ToString().Trim() == "0000") { string strBankCode = sArray["bank_code"].ToString().Trim(); string strBandPath; if (!bankPath.ContainsKey(strBankCode)) { strBandPath = "9999"; } else { strBandPath = bankPath[strBankCode]; } BankBin bankBin = new BankBin(); bankBin.card_no = strCardNo; bankBin.bank_code = strBandPath; bankBin.bank_name = sArray["bank_name"].ToString().Trim(); bankBin.card_type = sArray["card_type"].ToString().Trim(); bankBin.card_bound = BankNoExists(strCardNo, userId) ? "true" : "false"; result.status = 1; result.msg = "查询成功"; result.model = bankBin; } else { result.status = 0; result.msg = "查询信息失败,连连返回错误号:" + sArray["ret_code"].ToString().Trim() + ",错误信息:" + sArray["ret_msg"].ToString().Trim(); } } else { result.status = -1; result.msg = "未查询到信息"; } var sbq = GetSupportBank(); if (sbq == null) { result.status = -2; result.msg = "手机支付不支持该卡"; } IsoDateTimeConverter timeConverter = new IsoDateTimeConverter(); timeConverter.DateTimeFormat = "yyyy'-'MM'-'dd' 'HH':'mm':'ss"; string resultJson = Newtonsoft.Json.JsonConvert.SerializeObject(result, timeConverter); Context.Response.Write(resultJson); }