银企互联NC中间件(演示:.NETJavaPhpPython)
Posted Mr方de银企互联知识分享
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了银企互联NC中间件(演示:.NETJavaPhpPython)相关的知识,希望对你有一定的参考价值。
*本程序非官方,作为企业客户的财务系统或客户端的一部分,由企业客户做好安全保护和维护*
* 使用本程序,视作已知晓且同意*
Java、php、Python我都没学过,网上摘了点代码,自己修改调试,完成了这次演示。一方面说明NC中间件的跨语言特性,另一方面,也表明通过本中间件来对接工行银企互联NC模式推广版,技术门槛可以降到极低。
对开发语言比较熟悉的,几个小时就能调通,包括大批量压缩方式、产生日志文件、获得电子回单文件等。
XML报文中的TranDate、TranTime、SignTime、fSeqno:
请使用<Name>XX</Name>格式,如使用<Name/>,程序无法自动替换内容。我没有使用XML相关的类,而是自己写了一个针对银企互联报文格式的字符串的类,采用<Name>XXXX</Name>这样的格式。
先使用.NET来演示我的NC中间件。
有一个公用的函数,是Http Post的功能,网上很多:
演示代码如下:
上面这段代码,演示了一个查询余额(为了在命令行中直观显示,调用了NC中间件的QACCBAL接口),然后做一个10笔指令的支付,而且用的是压缩方式(鼠标选中的那段,加了<zip>和</zip>,告诉我的中间件,这利用压缩方式提交)。压缩方式支持1000笔(早期说法5000笔)。我这里只是演示压缩方式,10笔是不需要压缩的。
命令行运行:
支付的自定义流水号是:1901021733P6B0@PE
查询该笔指令状态的程序就是:
上述代码是查询指令状态,直接输出明文:
上图中有</zip>信息,表明是压缩模式。
看一下PDF电子回单的代码,新增一个简单的函数,就是把Base64编码的字符串解码后写入文件:
static void B64String2File(string B64Str,string fileName)
{
byte[] bb= Convert.FromBase64String(B64Str);
FileStream fs = new FileStream(fileName, FileMode.Create);
fs.Write(bb, 0, bb.Length);
fs.Close();
}
做一个9分钱交易的电子回单:
运行结果:
打开PDF看看:
代码简单而简洁,在艰苦的测试环境中也没有指定日期和时间。可以看看ICBC_Log目录,里面就是NC中间件自动产生的日志文件:
可以看到这个PAYENT在支付之前,NC中间件主动发起一个请求去查询银行主机的日期时间,然后自动把XML中的相关信息调整到与银行日期时间一致。虽然,对银行来说会有一些“检测日期时间的”垃圾信息发过来,但对客户来说,是很好的体验。
下面用Java演示。
Java也网上找了一个Http Post的函数:
先看一下如何使用ICBC_YQHL。
这段代码就是把做一笔普通PAYENT,显示银行返回信息(明文)。
运行结果是:
制作上面这笔67.89元的PDF电子回单的演示:先查询明细,获取时间戳,然后调用电子回单接口获得文件。
获取的回单:
PHP:
php的代码,先查询余额,做一笔支付33.44元,再查余额。运行结果如下,可见余额已经变化。
php,33.44元的交易的电子回单:
Python:
做一笔99.88元的支付:
上述交易回单:
2018年11月的时候,另一家使用SAP的客户,也选择了我的NC中间件对接,客户的开发团队还包含IBM的工程师。
12月末,重新制作测试环境数据,对方开发人员从早上9点开始到中午11:30,已经完成了支付的开发。测试过程中发生了“签名时间……”的错误,我发现是检测银行主机日期时间的时候超时了,没有检测到。另外,方便的让对方技术人员提供了日志文件,非常快速的判断了问题所在。
关于自主开发的NC中间件的文章,从“诞生”、“简介”、“部署”、“接口介绍”到今天的“演示”,应该差不多了。我提供了一个自认为优秀的轻量级开发对接平台,比起讲述具体如何面向NetSafeClient进行开发更有意义。至于未来是否经得起实践的检验,交给时间去判定吧。
*本程序非官方,作为企业客户的财务系统或客户端的一部分,由企业客户做好安全保护和维护*
* 使用本程序,视作已知晓且同意*
OVER
以上是关于银企互联NC中间件(演示:.NETJavaPhpPython)的主要内容,如果未能解决你的问题,请参考以下文章
用友ERP-nc保存的时候提示保存VO数组失败,详细请看日志是啥意思