背景
相关 wiki 定义。
银企直联是指集团企业在集团内部建立自己的资金管理系统,通过数据接口将内部资金管理系统与商业银行核心系统、网银或者现金管理平台实现联接。通过银企直联系统企业可实现实时帐户信息查询、明细查询、自动转帐、交易查询等功能。并且交易的实时性和方便性得到大幅提高。“银企直联”的应用特点是连接手段不限,公网、专线均可。
下面说说一些使用银企直联的实际场景。
公司一般都会在某个银行开设对公账户,相关款项需要通过该对公账户出款。使用对公账户出款需要使用企业网银,出款流程类似我们使用个人网银出款流程。
若业务场景需要将商家的当天收款金额转账至其银行卡。未接入银企之前,财务同学需要登录企业网银,创建出款信息,然后插入银行 U 盾,确认出款。接入银企之后,可以实现自动将商家的金额汇总然后转账出款,无需繁琐的网银流程。这样可以与内部服务关联,实现线上化。
当然银企服务还可以实现查找银行流水等功能。
我司基于银企直联服务,开发了公司内部服务,很大程度解决财务打款,后期做账核对繁琐问题。
现就将本人接入几家银行经历,谈谈银企直联服务接入流程。
银企接入流程
银企接入流程:
- 与银行签订相关服务,获取相关开发文档,以及生产相关配置参数。
- 安装银企前置服务。
- 根据文档接入相关接口。
- 相关接口测试环境测试,完成测试报告,提交给银行。银行开通正式环境权限,然后在正式环境测试连通性。
第一步一般由公司财务相关人员与银行客户经理商谈即可。
第二步安装银企前置服务软件。整个银企服务一般由企业应用程序,银企前置程序,银行服务构成。三者关系见下图。
企业内部程序根据银行文档组装报文,报文格式一般以 xml 为主。然后内部程序将报文通过 HTTP 或 Socket 方式发送至银行前置程序。银行前置程序接受报文,先进行相关报文格式校验,然后使用数字证书加密报文,发送至银行服务。最后银行前置程序验证银行服务返回报文,再将解析后报文返回企业内部程序。
银行前置程序与银行服务连接有两种方式:
公网连接,特点成本低,网速容易受外部网络环境影响。
专线连接,采用专门线路物理连接企业与银行两端。该方式网速稳定,不易受外部网络环境影响。但是成本相对较高。
需要注意的是,银企前置程序大都只能安装在 Windows 上,可能与银企直联所需要的 U 盾驱动只兼容 Windows 有关。有的银企前置程序为单独软件,需要安装,有的为 Java 程序,无需单独安装。
第三步,根据银行开发文档接入相关接口。
银企服务一般会提供转账,查询流水,查询余额等接口。
第四步测试相关银企服务,有的银行需要在测试环境测试通过后,才能开通正式生产环境。
目前已经开发的银行如下:
- [x] 招商银行
- [x] 建设银行
- [x] 宁波银行
- [x] 平安银行
- [x] 工商银行
相关银行开发经验
招商银行
招行银企前置程序需要单独安装,相关接口按照文档开发即可。招行开发文档比较完善,且存在相关 Demo,接入比较简单。
建设银行
建行银企前置服务为 Java 程序,需要安装 JDK5+ 。
建行银企前置程序需要设置操作员,需要提前在企业网银处设置,设置过程比较繁琐。
建行开发文档未提供开发 Demo,可以向银行支持技术索取。企业程序向建行前置服务发送报文需要使用以下方式 requestXML='xml' 。
宁波银行
这家银行相对坑爹,前期银行技术支持给错文档,且支持人员不知道前置机软件怎么安装。后经与其总行交谈,才获取接口等文档。
前置程序需要单独安装,设置也比较麻烦,需要指定两个端口,一个为报文接受端口,一个为加密端口。
宁波银行与上面银行不同之处在于,其每笔报文需要先通过登陆接口获取 session,然后再构建报文。转账接口报文需要先将报文发送到前置机加密,获取签名数据,然后将签名数据组装到报文中构成完整 xml。
宁波银行前置程序使用 U 盾驱动兼容性较差,长时间使用过程中会出现 U 盾突然无法识别情况,需要重新插拔。
平安银行
银行前置程序为 Java web,需要使用 JDK 6+ 版本。
平安银行报文由报头加报文体构成。报文头按照固定格式拼接,报文体根据接口拼接。部分接口需要前置机加密,需要在前置机软件后台提前设置。
工商银行
工行前期接入过程需要注意 U 盾自带驱动存在问题,需要使用特殊的驱动程序。
U 盾证书刚开始拿到可能无法用于交易,需要银行人员分配证书权限。
相关问题
下面说说接入或日常运维中中可能碰到的问题。
转账掉单问题
银企转账接口,未返回一个不明确状态(成功或失败),这种情况我们称为掉单。
导致掉单的原因可能为银行内部服务出错,或网络问题。
对于这种掉单情况,需要配合使用银企查询接口,查询最终状态。
银企前置程序并发问题
银企前置程序一般无法支持很高并发交易量,如招商银行文档就建议同时不超过 50 。若企业程序调用转账接口并发数较大,可以采用批量打包方式,每隔一段时间将所有交易组装成报文,然后调用银企批量转账接口。
安全问题
企业内部服务与银企前置服务通讯报文一般都是未加密的明文,这个通讯过程比较容易被监听,篡改,安全性较低。
我们之前做法为将银企服务与企业内部程序部署在企业内网。外部网络访问需通过相关 VPN 才能访问。
转账时效
银企转账接口通常内部使用人行大小额系统或超级网银系统。采用系统不同,转账时效性也不同。
大小额系统由大额支付系统与小额支付系统构成。小额系统全年无休,7x24 小时工作,金额小于 5W 的交易会采用小额系统。大额系统运行在工作日的 8:00 ~ 17:00,金额大于 5 W 以上的以上会使用大额系统。
超级网银系统,央行第二代支付系统,交易限额为 5w,到账速度非常快,但是相对转账费率较高。
对于非工作日大于 5w 的交易若想保证时效性,可以采用拆单方法,将一笔转账拆分成多笔转账出去。
联行号/超级行号
银企转账接口,一般对于跨行转账,接口需要传入他行卡所在行的联行号/超级行号。联行号/超级行号相关资料可以让银行提供,但是不同银行给的资料可能不太相同。
企业网银设置问题
前期接入过程,若报文组装正确,但是报文始终无法通过,多半由于权限未正常设置导致。一般需要登录企业网银单独设置权限,设置比较繁琐,且每家银行都不太一样,详情咨询银行客户经理。
银行 U 盾密码问题
银企程序每次启动运行前会读取加载 U 盾数字证书,读取过程需要输入 U 盾数字密码。需要注意输入正确密码,输错次数过多,会导致 U 盾被银行锁死无法使用。需要去银行解锁或重新申请新 U 盾。这个说多了都是泪。:(