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