准备开始在开始之前我们会拿到2个东西,一个是中国农业银行银企通平台(4.70版).msi安装包,另一个是现金管理银企直连接入开发手册V1.2.1.wps接口文档说明开始安装前置机程序,完成之后是这个样子:
组装XML数据看到上图,已经成功的监听到了15999端口,现在我们就要向前置机所在的机器的ip+port的这个URL上推送XML数据,例如:192.168.1.111:15999这里举一个范例:汇兑-单笔对似,xml数据报文是这样要求的。java代码实例:
1//5.汇兑-单笔对私2ApRootroot=newApRoot();3root.setCCTransCode("CFRT21");4root.setAmt("9.10");5builder.setRoot(root);6ApCmpcmp=newApCmp();7cmp.setDbAccNo("361101040010679");8cmp.setDbProv("05");9cmp.setDbCur("01");10cmp.setDbLogAccNo("");11cmp.setCrAccNo("6228453296002816764");12cmp.setCrProv("");13cmp.setCrCur("01");14cmp.setCrLogAccNo("");15cmp.setConFlag("1");16builder.setCmp(cmp);17ApCorpcorp=newApCorp();18corp.setPsFlag("");19corp.setBookingFlag("0");20corp.setBookingDate("");21corp.setBookingTime("");22corp.setUrgencyFlag("0");23corp.setOthBankFlag("0");24corp.setCrAccName("郑春广");25corp.setDbAccName("内猛关仪太彩悟佑慊古丝");26corp.setWhyUse("测试");27corp.setPostscript("测试");28builder.setCorp(corp);安装要求组装数据:
112Strings=builder.toXmlString(builder);3/**4*请求数据:加密标识(1加密,0不加密)+请求xml数据的长度(默认7位,不够补空格)+请求的xml5*@params请求的xml6*@authorjieYW7*@date2018/5/298*@returnjava.lang.String9*/10publicStringgenRequestData(Strings)throwsException{11return"1"+String.format("%1$-6s",s.getBytes("gbk").length)+s;12}跟据交易明细表与ERP对接生成收款单(这里主要说报文提交与读取)
Socket接收端代码:
【讲xml转换成socket套接字段】
socket发送数据将上述组装好的数据通过tcp协议发送给前置机:
1Strings=builder.toXmlString(builder);2ApHttpRequestrequest=newApHttpRequest();3Strings1=request.socketSendAndReceive("192.168.1.111",15999,builder.genRequestData(s));4System.out.println("接受数据:"+s1);
测试结果:
补充代码XML组装:
发送报文:
1publicStringsocketSendAndReceive(Stringurl,intport,Stringdata)throwsException{2System.out.println("请求数据:"+data);3Socketsocket=newSocket(url,port);4OutputStreambw=socket.getOutputStream();5bw.write(data.getBytes("gbk"));6bw.flush();7InputStreamips=socket.getInputStream();8StringBuffersb=newStringBuffer();9intlen=0;10byte[]buf=newbyte[1024];11while((len=ips.read(buf))!=-1){12sb.append(newString(buf,0,len,"gbk"));13}14bw.close();15ips.close();16socket.close();17returnsb.toString();18}
解析XML:
*******术语解释********
1.网银和银企直联的区别1.1网银网银,简单地讲,就是银行在互联网上开展的各种业务,也就是银行客户利用个人计算机通过Internet获得银行的各项服务,银行利用专用的服务器提供各项在线服务。对银行,这种高效、全天候的服务能够吸引更多的用户,而且网上银行本身可以大大削减现有银行众多的分支机构,减少工作人员,提高工作效率。
1.2.银企直联银企直联是一种新的网上企业银行系统与企业的财务软件系统在线直接联接的接入方式。银企直联通过因特网或专线连接方式,实现了银行和企业计算机系统的有机融合和平滑对接。企业通过财务系统的界面就可直接完成对银行账户以及资金的管理和调度,进行信息查询、转账支付等各项业务操作。同时,银企直联可以为企业在其财务系统中开发和定制个性化功能提供支持,具有信息同步、高效简便、个性服务和安全可靠的鲜明特色。银企直联能够做到与企业计算机系统的对接,方便的完成企业系统的与银行有关的交易。
2专业术语2.1接口IP地址种类银行的服务IP,主要是银行内部对银企通服务的IP地址,此IP对于银行来说是确定的,不会随客户的改变而改变。此IP主要用于企业前置机的银行服务程序的接入端,银行对每一个客户安装的企业客户端程序,都需要连接此IP地址。
前置机的服务IP,主要是针对企业客户端的接入地址,此IP地址可以随客户的不同网络进行调整,其服务端口也可依照客户前置机的不同而进行调整。前置机的银行服务程序主要负责数据的加密、验证和转发功能。银行客户端程序连接到银行服务IP,并且对企业程序提供数据的接收和发送功能。所以前置机的银行服务程序一般需要配置两个IP地址,一个是银行的服务IP地址,另一个是对企业提供服务的IP和端口。通常对企业提供服务的IP也是该程序所在前置机的IP地址。
接口的通讯IP,主要是用户企业客户端连接前置机的IP,此IP通常为银行服务程序的IP。
2.2报文所谓报文,就算数据交换双方所共识的一种文本格式,报文作为数据交换是非常重要的,在日常数据交换的过程中,报文必须正确,而且必须与约定的相同。否则,对方将无法明白所收到数据的明确意图。
2.2.1报文种类目前接口经常使用的报文主要包括一下几种:
XML报文:所谓XML,也是一种目前国际标准的文档格式,XML报文的主要优点在于信息明确,便于阅读和理解,而且对于每个字段,其长度也可随时调整。
定长串:此类报文格式主要是通过约定一个长度的信息作为预定的内容,将需要传输的数据通过固定的长度发送给对方,由于长度双方都有约定,所以对方收到此数据后,即可知道固定长度的信息内容。
固定顺序加分隔符(多域串):此报文格式一般需要约定报文的字段的顺序,然后传输数据的各类信息通过分隔符的形式分开,用户通过分析数据分隔符来判定信息的位置,完成数据的传输。
注:以上介绍了几种常用的报文格式,在日常使用过程中,可以将以上种类的报文进行融合,但是一般XML内部可以嵌套使用定长串或者多域串。
2.3通讯方式OLE方式:此类方式一般由银行提供OLE开发控件和调用说明,客户端安装和注册这些控件,按照银行提供的调用说明进行数据的交互,数据的加密、发送、接收和解密。
SOCK通讯:此类方式首选需要银行提供服务的IP地址和端口,客户端将约定的交易报文发送到此IP地址和端口。然后接收银行返回的数据。
2.4银行签约在使用银企直联时,相当于在集团内部有一个银行的柜员,所有发生的交易都由该柜员完成,所谓柜员,就是银行对集团用户的唯一标识号码,有的银行为客户号,有的银行叫做操作员,这些都是银行受理交易的一个接入要素。因为集团所有的帐号都由该柜员管理,所以办理银行签约,就相当于给该柜员(客户号、操作员)于集团的帐号建立操作权限。签约完成后,需要银行根据签约的具体内容进行操作员帐号的初始化工作。完成这些功能,企业就可以以该柜员的身份操作签约的帐号,完成日常的交易。
2.5签约模式目前银行的签约模式主要分类两类,一类为收支分开模式,此类签约模式在银行内部定义了各个帐号的收入类帐号和支出类帐号。此类签约的签约帐号所发生的交易必须严格按照银行内部定义的收支方向进行资金划转交易。另外一类为统一收支模式,此类签约模式在银行内部,签约帐号之间的收支不具备方向性。任何帐号之间都可以进行资金的划转。在对外支付时,只要支付帐号具有对外支付的权限,就可以进行对外支付交易。
2.6资金上划资金上划就是集团内部发生的,集团总帐户收取下属单位的帐户的资金,如果该集团为收支分开模式,则收取的为收入类帐户的资金。如果为统一收支模式,则收取的为该总帐号所有允许划款的子帐户的资金。
2.7资金下拨资金下拨就是集团内部发生的,集团总帐户支付给下属单位的划转交易。
2.8调拨策略调拨策略即用户指定的、具有一定特性的资金划转交易的交易规则,使用调拨策略,接口可自动跟据调拨策略的功能完成资金的划转交易,使用调拨策略的帐户,只限于集团内部签约帐号。
2.9联动下拨联动下拨是指在对外付款的交易发生时,由于子帐户付款,而该子帐户的帐户余额又为零,此时会由接口自动从总帐户向该子帐户进行拨款,使该子帐户的余额满足其支付的金额
————————————————
参考1:
参考2:
参考3:
这个Request类有2个方法:构造方法接受一个InputStream对象(socket中的输入流对象),readHtml()方法是用来读去到底浏览器给我们发送了什么内容(从inputStream对象中获取内容)。
2、然后我们就可以在socket服务端使用Request类了MyServer.java:
5、来到我们的socket服务端代码,现在既要处理输入也要处理输出了MyServer.java:
银企上线后的常见问题:
(1).生产环境应用服务器连接不上前置机服务器
(3).行内支付使用直接支付接口,返回错误信息:收方必须为商户账户
咨询招行技术人员得知是因为我们公司在招行的账户受到限制,收款方必须加入白名单才能打款。询问财务人员,确实如此,经加入白名单后,打款成功。
跨行未受到限制,估计是因为走的是央行的超级网银渠道,所以没有限制。(4).跨行支付收款方行号的问题
跨行支付时需要输入收款行行号,只能输入总行的行号,输入支行的行号报错。商务人员会提供“人行网银互联(跨行清算系统)联行号信息.txt”,其中有各银行及对应的联行号。