農行銀企直連接口之查詢賬戶交易明細與ERP對接


跟據農行提供的接口文檔。(仍然以你手中的接口文檔為准哦)

本人做的是跟據交易明細表 與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,


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM