工行银企互联(NC模式)中间件开发模式

本文档介绍了如何开发银企互联的NC模式中间件,通过WebService简化企业客户开发工作。开发者提供了自动执行签名、日期配置、日志记录等功能,并详细阐述了部署与使用方法,适用于不支持socket协议的系统。
摘要由CSDN通过智能技术生成

相关NC中间件的文章,已经放到个人公众号(“开发谈”栏目),扫码可以进入。

  1. 适用对象:自己动手开发银企互联的企业客户。
  2. 非官方产品,客户应优先根据官方开发手册自行开发。
  3. 开发者免责:开发者力求正确,也经过测试,但无法避免潜在的错误。任何软件都可能存在错误。
  4. 客户使用银企互联,应遵从谨小慎微的原则,从查询业务、小金额业务着手,必要时采用银企互联提交指令、企业网银授权的模式。
  5. 本WebService程序在Windows操作系统上部署,需要.net4.0框架。
  6. 未尽事宜,请参阅官方开发手册。

常规开发模式中,数据交互方式如下:

 

如果是签名类交易,业务发起流程如上图。客户开发的工作量主要是 1、3,较为繁琐。
如果是查询类交易,则上述步骤中 1、2 不做。

企业客户开发过程通常遇到的问题:

  1. 不太愿意看官方开发文档。实际上,我自己开始着手练习银企互联技术,就是按照官方文档来的。
  2. 不知道如何去做签名。
  3. 银行测试环境日期非标准,无法灵活应对请求信息中的日期、时间相关参数。
  4. 很少自己产生日志文件,遇到错误难以确定。向银行陈述错误没有依据。
  5. 采用过程化,很少对象化,代码复用性差,程序不健壮。
  6. 官方提供的DEMO比较少。
  7. 部分企业客户的系统不支持socket协议,需要银行或者开发商提供辅助手段。
  8. 一些高级技巧、应用无从谈起,比如大批量指令发送,制作PDF格式的电子回单。

本方案设计的数据交互为:

本方案图中步骤 2、5,相当于第一图中的 1、2、3、6,由 WebService 自动执行。

特点:

  1. ERP系统只需要通过HTTP协议将参数和发送内容一次性POST到WebService指定页面,接收应答即可。开发者不需要关注签名、提交页面格式、报文头参数、压缩模式等,实现了跨平台、跨语言的简单开发。
  2. 支持压缩模式提交大批量指令:rd最外层头尾套<zip>、</zip>即可,比如:……<zip><rd>……</rd>……<rd>……</rd></zip>……。WebService会自行压缩数据。如将压缩好的数据放入zip节点(官方做法)后使用本程序提交反而会出错。
  3. XML报文中日期/时间关键参数自动配置,大部分情况下自适应银行主机时间。特别是在测试环境的时候,不需要调整本机时间。
  4. ICBC_Log文件夹可以保存日志文件,方便跟踪。
  5. 提供PDF文件的高级应用。

部署本WebService,需要.NET4框架。

  1. 如果没有按照.net4框架,请安装。如果没有安装IIS,请安装。为减少错误,其中应用程序开发功能请全选。
  2. 添加网站,选择物理路径,自己定义一个不常用的端口,本例使用1398。
  3. 运行。浏览器打开对应地址,比如http://127.0.0.1:1398,点击WebService.asmx,可以看到提供的服务。点击CheckNC或者CheckWS,可以查看到对应返回内容,则表明部署成功。
  4. 如果需要从局域网其他电脑访问本WebService,则需要在防火墙中添加的本服务端口(入站、TCP)。

 

WebService中Web.Config信息:

nc_ip:NetSafeClient的IP地址。

nc_hp、nc_sp:NetSafeClient的HTTPS服务端口以及签名端口。

cis、id:客户企业网银对应的CIS编号和证书名称。使用ICBC_YQHL方法时与XML中信息校验。

log、pdf_save:是否产生日志文件,是否保留pdf回单文档。方便客户调试。

如果防火墙端口未添加,从其他电脑访问出错:

 

添加端口后,访问正常:

提供的方法以及需要的参数,可以自行点击WebService.asmx查看。比如QACCBAL,从图中看到就是acct一个参数:

 

本项目的第一个测试客户,是因为sap不支持socket协议,提出“银行给出中间服务层”的需求。给了他们第一个版本(参数个数和现在有些不同),经过调试,畅通。下图是客户sap界面,他们用了get方式,已经建议修改为post。

对于最重要的ICBC_YQHL方法做些说明:

  • 程序自动替换内容的空白节点请使用<node></node>这种格式,如果写成<node/>这种,程序无法自动填充其数值。TranDate、TranTime、SignTime等字段,程序将自动补充,为避免部分系统自动将<TranDate></TranDate>变成<TranDate/>这种格式,可以随意输入些内容,比如<TranDate>NotCare</TranDate>。
  • fSeqno节点内容如果空白或内容长度<=3,则由系统自动填写。个人建议:查询类的报文该字段可以空白或输入长度小于3的内容,交易类的请指定fseqno内容(长度>3),避免发送请求后没有接收到回执而无从判断银行究竟接收到了指令没有。

从网上摘录一些代码,作为本项目的多语言测试。

PHP:先查询余额;做一笔支付;再查询余额。由于是工行系统内支付,实时处理,故第二次查询的时候,余额已经变化了。

<?php
header('charset: GBK');

function send_post($url, $post_data) {
    $postdata = http_build_query($post_data);
    $options = array(
        'http' => array(
            'method' => 'POST',
            'header' => 'Content-type:application/x-www-form-urlencoded',
            'content' => $postdata,
            'timeout' => 30 // 超时时间(单位:s)
        )
    );
    $context = stream_context_create($options);
    $result = file_get_contents($url, false, $context);
    return $result;
}
$xml_info='<?xml version="1.0"encoding="GBK"?><CMS><eb><pub><TransCode>PAYENT</TransCode><CIS>46694306-XAAAAA</CIS>'
.'<BankCode>102</BankCode><ID>suzhouTest.y.1102</ID><TranDate></TranDate>NotCare<TranTime>NotCare</TranTime><fSeqno>X</fSeqno>'
.'</pub><in><OnlBatF>1</OnlBatF><SettleMode>0</SettleMode><TotalNum>1</TotalNum><TotalAmt>1122</TotalAmt><SignTime></SignTime>'
.'<ReqReserved1></ReqReserved1><ReqReserved2></ReqReserved2><rd><iSeqno>1</iSeqno><ReimburseNo></ReimburseNo><ReimburseNum>'
.'</ReimburseNum><StartDate></StartDate><StartTime></StartTime><PayType>1</PayType><PayAccNo>1102020109000009078</PayAccNo>'
.'<PayAccNameCN>剥滥火判酬</PayAccNameCN><PayAccNameEN></PayAccNameEN><RecAccNo>1102020109000203242</RecAccNo>'
.'<RecAccNameCN>剥滥判幕耕婚舒憾</RecAccNameCN><RecAccNameEN></RecAccNameEN><SysIOFlg>1</SysIOFlg><IsSameCity></IsSameCity>'
.'<Prop>
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
操作系统要求:WinXP 及以上操作系统,.NET4 FrameWork 框架。 开通业务:工行银企互联推广版(NC 模式)。鉴于安全角度考虑,可以申请一个仅查询权限的银企互联(磁盘)证书。 功能简述: 1、检测NetSafeClient通讯是否正常。 2、查询余额。如果账号的备注信息中包含“保证金”字样,将查询保证金账户的信息。 3、查询明细,含当天明细和历史明细。明细结果最后一栏是“跨行退款跟踪”,自己经验总结设计的。 4、查询行名行号。很多ERP都没有这个功能。通过网银或者银企互联做付款,有时候会有“行名行号不符”的错误信息。可以通过这个功能去查某个行的所有行名行号,或者输入具体一个行号查询行名。还有网银互联行名行号信息。 5、PDF 电子回单。大部分ERP都没这个功能。本程序提供。但受到评估版控件的限制,会有水印,也无法提供合并的PDF回单(比如一个月的回单都保存在一个 PDF 文档中,便于检索)。支持大部分外币币种字样显示。 PDF 回单值守模式,可以定期扫描明细制作 PDF 回单,存放路径和保存文件名都是可以设定的。这是我独创的功能。目前越来越多的企业需要电子回单,这个功能或许可以配合企业自己的ERP来实现准实时的PDF回单制作、检索功能。 6、PDF 电子票据。制作电子票据的PDF文件,供用户留档查看。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值