/// <summary> /// 从rd节点获取交易明细信息 /// </summary> /// <param name="bankVerInfo"></param> /// <param name="rdString"></param> /// <returns></returns> private DetailInfo getDetailInfofromRd(BankAcnt bankAcnt, string rdString) { //获得交易明细信息 DetailInfo DInfo = new DetailInfo(); XML_EASY xml = new XML_EASY(rdString); DInfo.bankAcnt = bankAcnt; //本方账号 //DInfo.bussinessName = decimal amount = this.getYuanMoney(xml.GetXMLNode("Amount")); DInfo.bussinessRefNo = xml.GetXMLNode("Ref"); if (xml.GetXMLNode("Drcrf") == "1") { //借方 DInfo.crebitAmount = amount; } else { //贷方 DInfo.debitAmount = amount; } DInfo.currency = xml.GetXMLNode("CurrType"); //币种 DInfo.explantion = xml.GetXMLNode("Summary"); //摘要 DInfo.rawTransTime = xml.GetXMLNode("TimeStamp"); //时间戳 DInfo.usage = xml.GetXMLNode("UseCN"); //用途 DInfo.vouhNo = xml.GetXMLNode("VouhNo"); //凭证号 DInfo.cVouhType = xml.GetXMLNode("CvouhType"); //凭证种类 DInfo.postScript = xml.GetXMLNode("PostScript"); //附言 DInfo.addInfo = xml.GetXMLNode("AddInfo"); //附件信息 //对方账号 DInfo.oppoBankAcnt = new BankAcnt(); DInfo.oppoBankAcnt.acntName = xml.GetXMLNode("RecipName"); //对方户明 DInfo.oppoBankAcnt.acntNo = xml.GetXMLNode("RecipAccNo"); //对方账号 DInfo.oppoBankAcnt.bankInfo = new BankInfo(); DInfo.oppoBankAcnt.bankInfo.bankCode = xml.GetXMLNode("RecipBkNo"); //对方行号 return(DInfo); }
/// <summary> /// 获得对应银行账号的当前余额 /// </summary> /// <param name="caller">调用者</param> /// <param name="bankCnt">银行账户信息</param> /// <param name="currency">币种</param> /// <returns></returns> public BalanceInfo getBalance(CallerInfo caller, BankAcnt bankCnt, string currency) { string error = string.Empty; var acct = bankCnt.acntNo.Trim(); if (acct.Length < 19) { error = "账号长度错误!"; throw new Exception(error); } //ICBCNCHelper ncHelper = ICBCNCHelper.GetInstance(); string xmlString = ICBCNCHelper.GetXmlString("QACCBAL"); InstallContext ic = new InstallContext(); //初始化数据 Type type = bankCnt.GetType(); PropertyInfo[] ps = type.GetProperties(); foreach (PropertyInfo i in ps) { object obj = i.GetValue(bankCnt, null); string name = i.Name; if (obj != null) { ic.Set(i.Name, obj.ToString()); } else { ic.Set(name, " "); } } //如果不写币种,会使用账户的币种 /* * if (string.IsNullOrEmpty(currency)) { * currency = "001"; //默认人名币 * } */ ic.Set("currency", currency); ic.Set("bankCode", bankCnt.swiftCode); ic.Set("cis", ConfigurationManager.AppSettings["cis"]); ic.Set("id", ConfigurationManager.AppSettings["id"]); //替换模板中的键为对应的值 var newXmlStr = ReplaceHelper.ReplaceStringVar(xmlString, ic); ICBC_NetSafeClient iCBC_NetSafeClient = CreateOneNC(); XML_EASY balString = new XML_EASY(newXmlStr);//new XML_EASY(ResourceSet.TransCode_QACCBAL_0010); if (acct.Length == 19) { balString.SetXMLNode("AccNo", acct); } //else if (acct.Length == 29 && acct[19] == '-') //{ // balString.SetXMLNode("AccNo", acct.Substring(0, 19)); // balString.SetXMLNode("AcctSeq", acct.Substring(20, 9)); //} string seqNo, seqResult; iCBC_NetSafeClient.Run(balString.GetXML(), out seqNo, out seqResult); iCBC_NetSafeClient = null; balString.SetXML(seqResult); if (balString.LocateString("<error>") >= 0) { error = balString.GetXMLNode("error"); throw new Exception(error); } string balMoney = balString.GetXMLNode("Balance"); if (balMoney != null && balMoney.Length > 0) { BalanceInfo balInfo = new BalanceInfo(); //取余额 decimal balance = Convert.ToDecimal(balMoney) / 100.0m; //以币种的最小单位为单位,人民币的单位为分,转换为元要除以100 //昨日余额 decimal accBalance = this.getYuanMoney(balString.GetXMLNode("AccBalance")); //可用余额 decimal usableBalance = this.getYuanMoney(balString.GetXMLNode("UsableBalance")); balInfo.bankAcnt = bankCnt; //账户信息 balInfo.balance = balance; balInfo.hisBalance = accBalance; balInfo.availBalance = usableBalance; balInfo.acntType = balString.GetXMLNode("AcctProperty"); //账户属性 balInfo.currency = balString.GetXMLNode("CurrType"); //币种 string retTime = balString.GetXMLNode("QueryTime"); if (!string.IsNullOrEmpty(retTime)) { balInfo.balanceDate = this.convertToDateTime(retTime); } balInfo.fSeqno = seqNo; //balString.GetXMLNode("fSeqno"); //指令包序列号 //error = "Name=" + balString.GetXMLNode("AccName") + "|Balance=" + accBalance.ToString() + "|银行应答时间=" + balString.GetXMLNode("QueryTime"); return(balInfo); } error = "银行RetMsg:" + balString.GetXMLNode("RetMsg"); throw new Exception(error); }
public BankReturnModel <DetailInfo[]> getHistoryDetails(CallerInfo caller, BankAcnt bankAcnt, DateTime beginTime, DateTime endTime, decimal minAmt, decimal maxAmt, string nextTag, string currency) { string error = string.Empty; string xmlString = ICBCNCHelper.GetXmlString("QHISD"); XML_EASY xmlQPD = new XML_EASY(xmlString); //设置头部信息 xmlQPD.SetXMLNode("BankCode", "102"); //工行为 "102" xmlQPD.SetXMLNode("CIS", ConfigurationManager.AppSettings["cis"]); xmlQPD.SetXMLNode("ID", ConfigurationManager.AppSettings["id"]); xmlQPD.SetXMLNode("AccNo", bankAcnt.acntNo); //银行账号 xmlQPD.SetXMLNode("MinAmt", (minAmt * 100).ToString()); //发生额下限,人民币分为单位,把元转换为分 xmlQPD.SetXMLNode("MaxAmt", (maxAmt * 100).ToString()); //发生额上限,人民币分为单位,把元转换为分 xmlQPD.SetXMLNode("NextTag", string.IsNullOrEmpty(nextTag) ? "" : nextTag); //下页标志 xmlQPD.SetXMLNode("BeginDate", beginTime.ToString("yyyyMMdd")); xmlQPD.SetXMLNode("EndDate", endTime.ToString("yyyyMMdd")); ICBC_NetSafeClient iCBC_NetSafeClient = CreateOneNC(); string seqNo, seqResult; iCBC_NetSafeClient.Run(xmlQPD.GetXML(), out seqNo, out seqResult); iCBC_NetSafeClient = null; xmlQPD.SetXML(seqResult); if (xmlQPD.LocateString("<error>") >= 0) { error = xmlQPD.GetXMLNode("error"); throw new Exception(error); } string retCode = xmlQPD.GetXMLNode("RetCode"); if (retCode != "0") { //error = "error=" + xmlQPD.GetXMLNode("RetMsg"); //throw new Exception(error); BankReturnModel <DetailInfo[]> retMo = new BankReturnModel <DetailInfo[]>(); retMo.retCode = retCode; retMo.retMsg = xmlQPD.GetXMLNode("RetMsg"); retMo.bankCode = "102"; retMo.fSeqno = seqNo; retMo.transCode = "QHISD"; retMo.tranDate = xmlQPD.GetXMLNode("TranDate"); retMo.tranTime = xmlQPD.GetXMLNode("TranTime"); return(retMo); } //取交易明细信息 List <DetailInfo> states = null; DetailInfo pInfo = null; string rdString = xmlQPD.GetXMLNode("rd"); int rdIndex = xmlQPD.Index(); if (!string.IsNullOrEmpty(rdString)) { states = new List <DetailInfo>(); //循环获取交易明细 do { pInfo = getDetailInfofromRd(bankAcnt, rdString); states.Add(pInfo); rdString = xmlQPD.GetXMLNode("rd", rdIndex); rdIndex = xmlQPD.Index(); }while (!string.IsNullOrEmpty(rdString)); BankReturnModel <DetailInfo[]> retMo = new BankReturnModel <DetailInfo[]>(); retMo.retCode = retCode; retMo.retMsg = xmlQPD.GetXMLNode("RetMsg"); retMo.bankCode = "102"; retMo.fSeqno = seqNo; retMo.transCode = "QPAYENT"; retMo.tranDate = xmlQPD.GetXMLNode("TranDate"); retMo.tranTime = xmlQPD.GetXMLNode("TranTime"); retMo.nextTag = xmlQPD.GetXMLNode("NextTag"); //下页标志 retMo.detailData = new BankReturnDetailModel <DetailInfo[]>(); retMo.detailData.infoData = states.ToArray(); return(retMo); } return(null); }
/// <summary> /// 检查前置机https服务以及签名服务状态 /// </summary> /// <param name="httpsState"></param> /// <param name="signState"></param> /// <returns></returns> public string CheckNetSafeClient(out bool httpsState, out bool signState) { httpsState = false; signState = false; string msg = string.Empty; #region 检查https服务 string error = string.Empty; BankAcnt bankCnt = new BankAcnt { acntNo = "1202022719927388888", acntName = "菌邢票董租氮蒸幻憨野该痼赴挥傻" }; var acct = bankCnt.acntNo.Trim(); if (acct.Length < 19) { error = "账号长度错误!"; throw new Exception(error); } string xmlString = ICBCNCHelper.GetXmlString("QACCBAL"); InstallContext ic = new InstallContext(); //初始化数据 Type type = bankCnt.GetType(); PropertyInfo[] ps = type.GetProperties(); foreach (PropertyInfo i in ps) { object obj = i.GetValue(bankCnt, null); string name = i.Name; if (obj != null) { ic.Set(i.Name, obj.ToString()); } else { ic.Set(name, " "); } } ic.Set("currency", "001"); ic.Set("bankCode", "102"); ic.Set("cis", ConfigurationManager.AppSettings["cis"]); ic.Set("id", ConfigurationManager.AppSettings["id"]); //替换模板中的键为对应的值 var newXmlStr = ReplaceHelper.ReplaceStringVar(xmlString, ic); ICBC_NetSafeClient iCBC_NetSafeClient = CreateOneNC(); XML_EASY balString = new XML_EASY(newXmlStr); if (acct.Length == 19) { balString.SetXMLNode("AccNo", acct); } string seqNo, seqResult; iCBC_NetSafeClient.Run(balString.GetXML(), out seqNo, out seqResult); balString.SetXML(seqResult); if (balString.LocateString("<error>") >= 0) { error = balString.GetXMLNode("error"); httpsState = false; msg = "前置机Https服务有问题:" + error; } else { httpsState = true; msg = "前置机Https服务OK"; } #endregion #region 检查签名服务 string signstr = iCBC_NetSafeClient.GetSignStr("www.gtdata.com"); if (!string.IsNullOrEmpty(signstr) && signstr.IndexOf("<sign>") > 0) { signState = true; msg += " 前置机签名服务OK."; } else { signState = false; msg += " 前置机签名服务有问题."; } #endregion iCBC_NetSafeClient = null; return(msg); }
public BankReturnModel <DetailInfo[]> getHistoryDetails(CallerInfo caller, BankAcnt bankAcnt, DateTime beginTime, DateTime endTime, decimal minAmt, decimal maxAmt, string nextTag, string currency) { throw new NotImplementedException(); }
public BankReturnModel <DetailInfo[]> getCurrentDetails(CallerInfo caller, BankAcnt bankAcnt, decimal minAmt, decimal maxAmt, string nextTag, string currency) { throw new NotImplementedException(); }
public BalanceInfo getBalance(CallerInfo caller, BankAcnt bankCnt, string currency) { throw new NotImplementedException(); }