农行银企直连接口之查询账户交易明细与ERP对接
2015-10-14 14:53
537 查看
跟据农行提供的接口文档。(仍然以你手中的接口文档为准哦)
本人做的是跟据交易明细表 与ERP对接生成收款单(这里主要说报文提交与读取)
这里小抱怨一下,农行提供的这个接口文档简直让人非常无语。没有demo不说,返回码的示意不全不准。一句话烂到爆。。。
看懂了吗,,不懂最好就直接找农行的技术人员吧。。也可以加微信kopania (不能保证能解答);
ad:亲爱程序员们,工作之余也要注意休息一下哦。喝点水(多喝水的好处不用多说吧),闭闭眼(缓解眼睛酸涩),走一走(小心pp长痘痘),长期面对电脑有辐射(脸上会有斑哦)。有空关注一下微信号kopania,她是一个程序媛,也许不能解答你(高手)的技术问题,但是可以解决你的肌肤问题。是一个对护肤品成分深有研究的人,给你一些护肤的建议。
本人做的是跟据交易明细表 与ERP对接生成收款单(这里主要说报文提交与读取)
这里小抱怨一下,农行提供的这个接口文档简直让人非常无语。没有demo不说,返回码的示意不全不准。一句话烂到爆。。。
#region 农行接口通讯方法 private static Socket ConnectSocket(string server, int port) { Socket s = null; IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(server), port); Socket tempSocket = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp); tempSocket.Connect(ipe); if (tempSocket.Connected) { s = tempSocket; } return s; } /// <summary> /// 通讯发送报文 /// </summary> /// <param name="server">服务ip 这里是连接农行客户端 所以ip默认应该是127.0.0.1</param> /// <param name="port">端口 这里是连接农行客户端,客户端登录后系统设置里会设置端口</param> /// <param name="DbAccNo">查询的账户银行账号</param> /// <param name="startTime">末笔时间戳 (文档有说明,通过这个查过的数据就不再过滤出来)</param> /// <param name="StarDate">查询的起始日期</param> /// <param name="EndDate">查询的截止日期</param> /// <returns></returns> private string SocketSendReceive(string server, int port, string DbAccNo,string startTime,DateTime StarDate,DateTime EndDate) { string _head = "<ap><CCTransCode>CQRA10</CCTransCode><ProductID>ICC</ProductID><ChannelType>ERP</ChannelType><CorpNo></CorpNo><OpNo></OpNo><AuthNo></AuthNo><ReqSeqNo></ReqSeqNo><ReqDate>" + DateTime.Today.ToShortDateString() + "</ReqDate><ReqTime>" + DateTime.Now.ToShortTimeString() + "</ReqTime><Sign></Sign>"; string request = _head + "<CCTransCode>CQRA10</CCTransCode><Corp><StartDate>" + StarDate.ToString("yyyyMMdd") + "</StartDate><EndDate>" + EndDate.ToString("yyyyMMdd") + "</EndDate></Corp><Channel><LastJrnNo></LastJrnNo></Channel><Cmp><DbAccNo>" + DbAccNo + "</DbAccNo><DbProv>38</DbProv><DbCur>01</DbCur><StartTime>" + startTime + "</StartTime></Cmp></ap>"; Byte[] byl = Encoding.Default.GetBytes(request); string _len = "1" + byl.Length.ToString().PadRight(6, ' ');//根据文档说明 报文前面要有7位数字,第一位是加密否标示,后面6位是报文的长度 Byte[] bytesSent = Encoding.Default.GetBytes(_len + request); Byte[] bytesReceived = new Byte[256]; // Create a socket connection with the specified server and port. Socket s = ConnectSocket(server, port); if (s == null) throw new Exception("Error:通讯连接失败!请检查农行客户端是否登录!"); // Send request to the server. s.Send(bytesSent, bytesSent.Length, 0); // Receive the server home page content. int bytes = 0; string page = ""; // The following will block until te page is transmitted. do { bytes = s.Receive(bytesReceived, bytesReceived.Length, 0); page = page + Encoding.Default.GetString(bytesReceived, 0, bytes); } while (bytes > 0); return page; } #endregion
string result = SocketSendReceive(host, port, idcode, strattime, _starDate, _endDate); XmlDocument _xml = new XmlDocument(); _xml.LoadXml(result.Substring(6)); XmlNode _RespSource = _xml.SelectSingleNode("//RespSource"); if (_RespSource.InnerText != "0") { XmlNode _RespInfo = _xml.SelectSingleNode("//RespInfo");//返回的提示信息 XmlNode _RxtInfo = _xml.SelectSingleNode("//RxtInfo");//返回的提示信息 //////报错信息记录/// } else { XmlNode _xnfilename = _xml.SelectSingleNode("//BatchFileName");//返回数据以文件形式保存 string _data = System.IO.File.ReadAllText("C:/Program Files (x86)/中国农业银行/中国农业银行银企通平台/detail/" + _xnfilename.InnerText, Encoding.Default);//银行客户端的文件路径 string[] _strdata = _data.Split('\n'); foreach (string _da in _strdata) { if (!string.IsNullOrEmpty(_da)) { string[] _strfi = _da.Split('|'); decimal _amtn = Convert.ToDecimal(_strfi[18].ToString()); if (_amtn > 0)//只取收款 { string _codeno = _strfi[11].ToString();//对方银行账户 string _compname = _strfi[13].ToString();//对方户名 //查询客户账户资料 DataSet _dscust = _query.DoSQLString("select CUS_NO from cust where NAME='" + _compname + "'");//_query 为底层查数据方法 if (_dscust.Tables[0].Rows.Count > 0) { string _lastTime = _strfi[4].ToString(); ;//末笔时间戳; string _rem = _strfi[31].ToString();//摘要 ///////////////保存收款单/////////////////////// ///////////////记录末笔时间戳/////////////////////// } else { //////报错信息记录/// } } } } }
看懂了吗,,不懂最好就直接找农行的技术人员吧。。也可以加微信kopania (不能保证能解答);
ad:亲爱程序员们,工作之余也要注意休息一下哦。喝点水(多喝水的好处不用多说吧),闭闭眼(缓解眼睛酸涩),走一走(小心pp长痘痘),长期面对电脑有辐射(脸上会有斑哦)。有空关注一下微信号kopania,她是一个程序媛,也许不能解答你(高手)的技术问题,但是可以解决你的肌肤问题。是一个对护肤品成分深有研究的人,给你一些护肤的建议。
相关文章推荐
- 矩阵的范数及相关数学含义
- 怎样用PS制作8张一寸照片及彩色转黑白照片方法
- javaScript中的将其他数据类型转换为Number类型
- Unity学习路线之C#基础----基本变量
- windbg查找c#高内存原因
- 如何解决windows系统和linux系统中端口被占用的问题
- Maven实战 第4章 背景案例
- 开发中Android的一些总结,帮助自己记忆
- IOS Android Tomcat SSL双向认证HTTPS访问
- 【springmvc学习第九弹】对Ajax的支持
- python flask 部署
- Chance随机字符串生成插件
- 用Java实现Web服务器
- Android 精华笔记
- Android TouchEvent事件传递机制
- CentOS最小化安装后,增加GNOME桌面
- Session会在浏览器关闭后消失吗???
- 使用MyEclipse14把Java web项目打成war包
- Go学习笔记:flag库的使用
- 根据条件取不同列中的值来排序