工行API查询接口,求api帮助文档

2236人阅读
工商银行的接口,硬是郁闷得很,想起就头疼,不过还是摸索出来了,代码如下:
//查询接口类ICBCQuery,命名空间为Bank
public class ICBCQuery
& & & & static string apiUrl = &.cn/servlet/ICBCINBSEBusinessServlet&;
& & & & static string cerPath = HttpContext.Current.Server.MapPath(&~/Bank/zysggzyjyzx.pfx&);
& & & & static string cerPwd = &123456&;
& & & & #region 属性
& & & & //pub
& & & & //接口名称
& & & & private string _APIN
& & & & public string APIName
& & & & & & get { return _APIN }
& & & & & & set { _APIName = }
& & & & //接口版本号
& & & & private string _APIV
& & & & public string APIVersion
& & & & & & get { return _APIV }
& & & & & & set { _APIVersion = }
& & & & //in
& & & & //订单号
& & & & private string _orderN
& & & & public string orderNum
& & & & & & get { return _orderN }
& & & & & & set { _orderNum = }
& & & & //交易日期
& & & & private string _tranD
& & & & public string tranDate
& & & & & & get { return _tranD }
& & & & & & set { _tranDate = }
& & & & //商家号码
& & & & private string _ShopC
& & & & public string ShopCode
& & & & & & get { return _ShopC }
& & & & & & set { _ShopCode = }
& & & & //商城账号
& & & & private string _ShopA
& & & & public string ShopAccount
& & & & & & get { return _ShopA }
& & & & & & set { _ShopAccount = }
& & & & //out
& & & & //指令序号
& & & & private string _tranSerialN
& & & & public string tranSerialNum
& & & & & & get { return _tranSerialN }
& & & & & & set { _tranSerialNum = }
& & & & //订单处理状态
& & & & private string _tranS
& & & & public string tranStat
& & & & & & get { return _tranS }
& & & & & & set { _tranStat = }
& & & & //指令错误信息
& & & & private string _bankR
& & & & public string bankRem
& & & & & & get { return _bankR }
& & & & & & set { _bankRem = }
& & & & //订单总金额
& & & & private string _
& & & & public string amount
& & & & & & get { return _ }
& & & & & & set { _amount = }
& & & & //支付币种
& & & & private string _currT
& & & & public string currType
& & & & & & get { return _currT }
& & & & & & set { _currType = }
& & & & //返回通知日期时间
& & & & private string _tranT
& & & & public string tranTime
& & & & & & get { return _tranT }
& & & & & & set { _tranTime = }
& & & & //收款人账号
& & & & private string _PayeeA
& & & & public string PayeeAcct
& & & & & & get { return _PayeeA }
& & & & & & set { _PayeeAcct = }
& & & & //收款人户名
& & & & private string _PayeeN
& & & & public string PayeeName
& & & & & & get { return _PayeeN }
& & & & & & set { _PayeeName = }
& & & & //校验联名标志
& & & & private string _JoinF
& & & & public string JoinFlag
& & & & & & get { return _JoinF }
& & & & & & set { _JoinFlag = }
& & & & //商城联名标志
& & & & private string _MerJoinF
& & & & public string MerJoinFlag
& & & & & & get { return _MerJoinF }
& & & & & & set { _MerJoinFlag = }
& & & & //客户联名标志
& & & & private string _CustJoinF
& & & & public string CustJoinFlag
& & & & & & get { return _CustJoinF }
& & & & & & set { _CustJoinFlag = }
& & & & //联名会员号
& & & & private string _CustJoinN
& & & & public string CustJoinNum
& & & & & & get { return _CustJoinN }
& & & & & & set { _CustJoinNum = }
& & & & //DDD商户签名证书id
& & & & private string _CertID;
& & & & public string CertID
& & & & & & get { return _CertID; }
& & & & & & set { _CertID = }
& & & & public ICBCQuery()
& & & & #endregion
& & & & #region 方法体
& & & & /// &summary&
& & & & /// 订单查询
& & & & /// &/summary&
& & & & /// &param name=&orderNum&&订单号&/param&
& & & & /// &param name=&tradeDate&&订单日期(yyyyMMdd)&/param&
& & & & /// &param name=&shopCode&&商户代码&/param&
& & & & /// &param name=&shopAccount&&商户帐号&/param&
& & & & /// &returns&&/returns&
& & & & public static object B2BQuery(string orderNum, string tradeDate, string shopCode, string shopAccount)
& & & & & & //gen post data
& & & & & & string postParams = &APIName=EAPI&APIVersion=001.001.001.001&MerReqData={0}&;
& & & & & & StringBuilder sb = new StringBuilder();
& & & & & & sb.Append(&&?xml version=\&1.0\& encoding=\&GBK\& standalone=\&no\& ?&&ICBCAPI&&in&&orderNum&&);
& & & & & & sb.Append(orderNum);
& & & & & & sb.Append(&&/orderNum&&tranDate&&);
& & & & & & sb.Append(tradeDate);
& & & & & & sb.Append(&&/tranDate&&ShopCode&&);
& & & & & & sb.Append(shopCode);
& & & & & & sb.Append(&&/ShopCode&&ShopAccount&&);
& & & & & & sb.Append(shopAccount);
& & & & & & sb.Append(&&/ShopAccount&&/in&&/ICBCAPI&&);
& & & & & & string postData = string.Format(postParams, sb.ToString());
& & & & & & //验证证书,默认有效
& & & & & & ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
& & & & & & //配置请求参数
& & & & & & HttpWebRequest wReq = (HttpWebRequest)WebRequest.Create(apiUrl);
& & & & & & wReq.ContentType = &application/x-www-form-urlencoded&;
& & & & & & wReq.Method = &POST&;
& & & & & & wReq.ClientCertificates.Add(new X509Certificate2(cerPath, cerPwd));
& & & & & & ASCIIEncoding encoding = new ASCIIEncoding();
& & & & & & byte[] data = encoding.GetBytes(postData);
& & & & & & wReq.ContentLength = data.L
& & & & & & Stream reqStream = wReq.GetRequestStream();
& & & & & & reqStream.Write(data, 0, data.Length);
& & & & & & reqStream.Close();
& & & & & & //获取结果
& & & & & & WebResponse wResp = wReq.GetResponse();
& & & & & & Stream respStream = wResp.GetResponseStream();
& & & & & & string stringResp = string.E
& & & & & & if (respStream != null)
& & & & & & {
& & & & & & & & using (StreamReader respReader = new StreamReader(respStream, Encoding.GetEncoding(&GBK&)))
& & & & & & & & {
& & & & & & & & & & stringResp = HttpContext.Current.Server.UrlDecode(respReader.ReadToEnd());
& & & & & & & & }
& & & & & & & & respStream.Close();
& & & & & & }
& & & & & & if (stringResp.IndexOf(&APIName&) & -1)
& & & & & & {
& & & & & & & & XmlDocument xmlDoc = new XmlDocument();
& & & & & & & & xmlDoc.LoadXml(stringResp);
& & & & & & & & var oneXml = xmlDoc.SelectSingleNode(&ICBCAPI&);
& & & & & & & & ICBCQuery cInfo = new ICBCQuery();
& & & & & & & & //pub
& & & & & & & & var pubXml = oneXml.SelectSingleNode(&pub&);
& & & & & & & & //接口名称
& & & & & & & & cInfo.APIName = pubXml.SelectSingleNode(&APIName&).InnerT
& & & & & & & & //接口版本号
& & & & & & & & cInfo.APIVersion = pubXml.SelectSingleNode(&APIVersion&).InnerT
& & & & & & & & //in
& & & & & & & & var inXml = oneXml.SelectSingleNode(&in&);
& & & & & & & & //订单号
& & & & & & & & cInfo.orderNum = inXml.SelectSingleNode(&orderNum&).InnerT
& & & & & & & & //交易日期
& & & & & & & & cInfo.tranDate = inXml.SelectSingleNode(&tranDate&).InnerT
& & & & & & & & //商家号码
& & & & & & & & cInfo.ShopCode = inXml.SelectSingleNode(&ShopCode&).InnerT
& & & & & & & & //商城账号
& & & & & & & & cInfo.ShopAccount = inXml.SelectSingleNode(&ShopAccount&).InnerT
& & & & & & & & //out
& & & & & & & & var outXml = oneXml.SelectSingleNode(&out&);
& & & & & & & & //指令序号
& & & & & & & & cInfo.tranSerialNum = outXml.SelectSingleNode(&tranSerialNum&).InnerT
& & & & & & & & //订单处理状态
& & & & & & & & cInfo.tranStat = outXml.SelectSingleNode(&tranStat&).InnerT
& & & & & & & & //指令错误信息
& & & & & & & & cInfo.bankRem = outXml.SelectSingleNode(&bankRem&).InnerT
& & & & & & & & //订单总金额
& & & & & & & & cInfo.amount = outXml.SelectSingleNode(&amount&).InnerT
& & & & & & & & //支付币种
& & & & & & & & cInfo.currType = outXml.SelectSingleNode(&currType&).InnerT
& & & & & & & & //返回通知日期时间
& & & & & & & & cInfo.tranTime = outXml.SelectSingleNode(&tranTime&).InnerT
& & & & & & & & //收款人账号
& & & & & & & & cInfo.PayeeAcct = outXml.SelectSingleNode(&PayeeAcct&).InnerT
& & & & & & & & //收款人户名
& & & & & & & & cInfo.PayeeName = outXml.SelectSingleNode(&PayeeName&).InnerT
& & & & & & & & //校验联名标志
& & & & & & & & cInfo.JoinFlag = outXml.SelectSingleNode(&JoinFlag&).InnerT
& & & & & & & & //商城联名标志
& & & & & & & & cInfo.MerJoinFlag = outXml.SelectSingleNode(&MerJoinFlag&).InnerT
& & & & & & & & //客户联名标志
& & & & & & & & cInfo.CustJoinFlag = outXml.SelectSingleNode(&CustJoinFlag&).InnerT
& & & & & & & & //联名会员号
& & & & & & & & cInfo.CustJoinNum = outXml.SelectSingleNode(&CustJoinNum&).InnerT
& & & & & & & & //DDD商户签名证书id
& & & & & & & & cInfo.CertID = outXml.SelectSingleNode(&CertID&).InnerT
& & & & & & & & return cI
& & & & & & }
& & & & & & return stringR
& & & & // The following method is invoked by the RemoteCertificateValidationDelegate.
& & & & public static bool ValidateServerCertificate(
& & & & & & & object sender,
& & & & & & & X509Certificate certificate,
& & & & & & & X509Chain chain,
& & & & & & & SslPolicyErrors sslPolicyErrors)
& & & & & & //if (sslPolicyErrors == SslPolicyErrors.None)
& & & & & & // & &
& & & & & & //Console.WriteLine(&Certificate error: {0}&, sslPolicyErrors);
& & & & & & // Do not allow this client to communicate with unauthenticated servers.
& & & & & & //
& & & & & &
& & & & #endregion
& & & & #region 枚举
& & & & /// &summary&
& & & & /// 错误代码含义
& & & & /// &/summary&
& & & & public enum ErrorCode
& & & & & & API查询的订单不存在 = 40972,
& & & & & & API查询过程中系统异常 = 40973,
& & & & & & API查询系统异常 = 40976,
& & & & & & 商户证书信息错 = 40977,
& & & & & & 解包商户请求数据报错 = 40978,
& & & & & & 查询的订单不存在 = 40979,
& & & & & & API查询过程中系统出现异常 = 40980,
& & & & & & 给商户打包返回数据错 = 40981,
& & & & & & 系统错误 = 40982,
& & & & & & 查询的订单不唯一 = 40983,
& & & & & & 请求数据中接口名错误 = 40987,
& & & & & & 商户代码或者商城账号有误 = 40947,
& & & & & & 商城状态非法 = 40948,
& & & & & & 商城类别非法 = 40949,
& & & & & & 商城应用类别非法 = 40950,
& & & & & & 商户证书id状态非法 = 40951,
& & & & & & 商户证书id未绑定 = 40952,
& & & & & & 商户id权限非法 = 40953,
& & & & & & 检查商户状态时数据库异常 = 40954
& & & & /// &summary&
& & & & /// 指令状态含义
& & & & /// &/summary&
& & & & public enum CommandState
& & & & & & 指令处理完成转账成功 = 3,
& & & & & & 指令处理失败转账未完成 = 4,
& & & & & & 指令超过支付人的限额正在等待主管会计批复 = 6,
& & & & & & 指令超过支付人的限额正在等待主管会计第二次批复 = 7,
& & & & & & 指令超过支付人的限额被主管会计否决 = 8,
& & & & & & 银行正在处理可疑 = 9
& & & & #endregion
//调用方法实例
&var oResult = Bank.ICBCQuery.B2BQuery(&10087&, &&, &2307EC.........&, &2307.........&);
& & & & string strResultMsg = string.E
& & & & //正常返回查询结果
& & & & if (oResult.GetType() == typeof(Bank.ICBCQuery))
& & & & & & var bInfo = ((Bank.ICBCQuery)oResult);
& & & & & & strResultMsg = Enum.GetName(typeof(mandState), Convert.ToInt32(bInfo.tranStat)).ToString();
& & & & else
& & & & & & strResultMsg = Enum.GetName(typeof(Bank.ICBCQuery.ErrorCode), Convert.ToInt32(oResult));
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:5495次
排名:千里之外工商银行网银接口(详细代码)--1
工商银行网银接口(详细代码)--1
前些时候调试工行B2C接口,写个备忘:
工行接口主要分两类,一是交易,二是查询。
商户程序需在银行模拟测试环境上进行联调后,再投产,以下说明联调开发步骤。
生成订单:
1、&商户和当地行联系,申请联调测试;由当地行在模拟测试环境录入商户信息,生成商户证书(pfx格式);并提供银行模拟测试环境的银行证书公钥文件(用于验证银行签名时使用);
2、&商户或者银行用证书拆分工具将pfx格式的商户证书拆分成扩展名为crt的公钥文件和扩展名为key的私钥文件;(这两个文件用于商户开发API调用来进行商户订单数据签名)
3、&商户进行开发,准备要求的订单数据;
4、&其中订单签名数据merSignMsg字段是对明文的签名数据;需要使用提供的API函数和商户私钥进行签名,得到签名串,然后做BASE64编码;
5、&其中商城证书公钥merCert字段需要使用API函数做BASE64编码;
6、&准备好订单数据,即完成订单提交的开发;之后只要将订单提交银行接收入口“https://银行地址/servlet/ICBCINBSEBusinessServlet”,银行来处理B2C指令的资金支付;
接收通知:
交易处理后,会将客户定向回商户网站,此时包含交易结果信息和银行签名。商户接收到银行通知后,需使用开发API和银行公钥来验证银行签名,以确保通知消息的有效性,以下简要说明验证步骤:
1、&获得各字段取值后,注意提交的明文需要进行base64解码才能获得。使用商户开发API和银行公钥文件对表单中的银行签名signMsg进行验签;
2、&验签成功后,为确保数据一致,建议商户比较一下通知消息中订单金额、卖家卡号等关键信息和自己记录的是否一致;
3、&商户根据交易结果tranStat来更新自己的指令状态和相关数据库信息;
交易接口:
&支付接口表单定义
新模式接口的交易数据整合到一个xml格式串,作为表单的一项整体提交,不再同原来每个字段都是key-value形式;
FORM表单数据如下:
interfaceName
取值:“ICBC_PERBANK_B2C”
接口版本号
interfaceVersion
取值:“1.0.0.3”
必输,签名;
整合所有交易数据形成的xml明文串,并做BASE64编码;
具体格式定义见下文;
需有xml头属性;整个字段使用BASE64编码;
xml明文中没有回车换行和多余空格;
订单签名数据
merSignMsg
商户使用工行提供的签名API和商户证书将tranData的xml明文串进行签名,得到二进制签名数据,然后进行BASE64编码后得到可视的merSignMsg;
注意:签名时是针对tranData的xml明文,不是将tranData进行BASE64编码后的串;
商城证书公钥
商户用二进制方式读取证书公钥文件后,进行BASE64编码后产生的字符串;
1、数据中不能包含“|”、“&”、“=”,这些字符为银行端程序保留字符;中文变量使用GBK编码。&
2、从商户Post过来的数据,参数名的名称必须与上表中完全相同,名称中的字母大小写均要相同,不能进行随意更改(在form中的提交按钮&input&type=”submit”……&中submit不能有Name属性);此外,如果其他input&项的Name中使用了双引号,如:&input&type=text&name="&merCert&"&value="xxxxxxx"&,则一定注意在引号内不要包含空格,不要写成“mer&URL&”,如果拼写错误或者多了空格,将造成数据无法识别,无法正常进行支付
3、接口名称和版本号一定要和上表中相同.。
4、商户提交数据中的空格将被认为是有效字符被接收,请商户开发时注意对多余空格的控制。
5、tranData交易数据的xml串需要有xml的头,即&?xml&version="1.0"&encoding="GBK"&&standalone="no"?&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。2012年6月 .NET技术大版内专家分月排行榜第一
2017年2月 总版技术专家分月排行榜第三
2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
2017年2月 总版技术专家分月排行榜第三
2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
2017年2月 总版技术专家分月排行榜第三
2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 java api帮助文档下载 的文章

 

随机推荐