非NC模式对接工行接口,工行返回的xml报文转json
第一次写博客,写得不好请见谅!
公司本来有个旧项目是用PHP3.1开发的,结果现在增加了一个需求。项目要求:客户通过银行APP自助转账来入金到平台,平台则通过非NC方式对接工行接口出金。本来应该是没有我这边的事的,谁知最后开发的时候,工行的项目经理反馈说现在非NC模式不支持太老版本的PHP了(也可能是没找到文档???),建议使用JAVA做个中间件,中间件接收工行的XML报文,再通过接口的方式返回json给PHP,接口是尽量的简化了参数,毕竟大部分参数用不到。
对接工行接口:(不要问我为什么加高级,问就是工行文档)
高级鉴权指令提交(交易代码:AUTHCK);
高级鉴权指令查询(交易代码:QAUTHCK);
支付指令提交(交易代码:PAYENT);
支付指令查询(交易代码:QPAYENT);
高级明细查询(交易代码:QHISD);
高级新多账户余额查询(交易代码:QACCBAL);
下面是中间件与php的对接文档。
必看说明
本系统采用MD5的算法进行签名。
请求的签名生成方法如下:
将除 sign 外的其他全部字段按照参数字典(ASCII)顺序,组装形成一个待签名字符signSrc=k1=v1&k2=v2&kN=vN
将得到的字符串signSrc+key(申请的密钥)进行MD5作为sign字段;
返回的签名校验方法如下:
只有返回的json结果中code=success的情况下才需要验签;
返回的json参数data+key(密钥)进行MD5生成sign进行比对;
账户余额查询
发送请求------------http://地址/icbc/QACCBAL.do |
||||
参数名称 |
参数含义 |
必填 |
数据类型 |
说明 |
packageID |
唯一编号 |
是 |
String(32) |
order1575266396000 |
sign |
签名 |
是 |
String(32) |
MD5签名 |
返回的数据 |
||||
{ "code": "success", "data": { "out": { "rd": { "AccBalance": "7", "AccName": "xxx有限公司", "AccNo": "", "AcctProperty": "004", "AcctSeq": "", "Balance": "7", "CashExf": "0", "CurrType": "001", "FrzAmt": "0", "HoldAmt": "0", "InterDeposit": "1", "InterWithdrawal": "1", "LastIntrDate": "2019-09-21", "MainAcctNo": "", "QueryTime": "20191220135600000020", "RepReserved3": "", "UsableBalance": "7", "iRetCode": "0", "iRetMsg": "", "iSeqno": "" } }, "pub": { "BankCode": "102", "CIS": "证书号码", "ID": "证书ID", "RetCode": "0", "RetMsg": "多账户余额查询成功", "TranDate": "20191220", "TranTime": "135620151", "TransCode": "QACCBAL", "fSeqno": "" } }, "sign": "a568d4e0bcf0431c2da86c87fe2c32bb" } |
鉴权
发送请求------------http://地址/icbc/AUTHCK.do |
||||
参数名称 |
参数含义 |
必填 |
数据类型 |
说明 |
packageID |
唯一编号 |
是 |
String(32) |
order1575266396000 |
accName |
姓名 |
是 |
String(30) |
张三 |
accNo |
卡号 |
是 |
String(19) |
6217232103000389459 |
certType |
证件类型 |
是 |
String(2) |
0-身份证 1-护照 2-军官证 3-士兵证 4-港澳台居民往来通行证 5-临时身份证 6-户口本 7-其他 9-警官证12-外国人永久居留证 |
certNo |
证件号码 |
是 |
String(18) |
|
isRealtime |
是否同步鉴权 |
否 |
String(1) |
0否 1是 |
sign |
签名 |
是 |
String(32) |
MD5签名 |
返回的参数 |
||||
{ "code": "success", "data": { "out": { "MerID": "银行卡部,商户档案号", "TotalNum": "1", "rd": { "AccName": "张三", "AccNo": "银行卡号", "CertNo": "证件号码", "CertType": "0", "OrderNo": "1", "Result": "7", "iRetCode": "0", "iRetMsg": "交易成功" } }, "pub": { "BankCode": "102", "CIS": "证书号码", "ID": "证书ID", "RetCode": "0", "RetMsg": "", "SerialNo": "KOA123456", "TranDate": "20191220", "TranTime": "140144051", "TransCode": "AUTHCK", "fSeqno": "" } }, "sign": "78be33849a82ce61f868b10004f0f213" } |
鉴权查询
发送请求------------http://地址/icbc/QAUTHCK.do |
||||
参数名称 |
参数含义 |
必填 |
数据类型 |
说明 |
packageID |
唯一编号 |
是 |
String(32) |
order1575266396000 |
二选一参数 |
||||
qryfSeqno |
鉴权接口上送的packageID |
否 |
String(32) |
鉴权上送的参数 |
qrySerialNo |
鉴权接口返回的SerialNo |
否 |
String(32) |
鉴权返回的参数 |
sign |
签名 |
是 |
String(32) |
MD5签名 |
返回的参数 |
||||
{ "code": "success", "data": { "out": { "MerID": "银行卡部,商户档案号", "TotalNum": "1", "rd": { "AccName": "张三", "AccNo": "银行卡号", "CertNo": "证件号码", "CertType": "0", "OrderNo": "1", "Result": "7", "iRetCode": "0", "iRetMsg": "交易成功" } }, "pub": { "BankCode": "102", "CIS": "证书号码", "ID": "证书ID", "RetCode": "0", "RetMsg": "", "SerialNo": "KOA123456", "TranDate": "20191220", "TranTime": "140144051", "TransCode": "AUTHCK", "fSeqno": "" } }, "sign": "78be33849a82ce61f868b10004f0f213" } |
出金(入账方式采用逐笔入账)
发送请求------------http://地址/icbc/PAYENT.do |
||||
参数名称 |
参数含义 |
必填 |
数据类型 |
说明 |
packageID |
唯一编号 |
是 |
String(32) |
order1575266396000 |
totalAmt |
总金额 |
是 |
String(20) |
无正负号,不带小数点,以分作单位 |
recAccNo |
对方账号 |
是 |
String(34) |
|
payType |
记账处理方式 |
是 |
String(1) |
1:加急 2:普通(工行异地人民币转账不再区分普通\加急,统一按加急处理) 3:跨行快汇(当涉及账户管家账户转账时,记账方式不支持普通,工行异地转账不再区分普通\加急,统一按加急处理) |
sysIOFlg |
系统内外标志 |
是 |
String(1) |
1:系统内 2:系统外 工行卡系统内,非工行卡系统外 |
useCN |
用途中文描述 |
是 |
String(20) |
用途描述 |
二选一必填参数 |
||||
recAccNameCN |
对方账户名称 |
否 |
String(100) |
根据人行标准,人民币账户的户名不应超过60字节,否则该字段可能被截取 如:张三 |
recAccNameEN |
对方账户英文名称 |
否 |
String(100) |
zhangsan |
跨行必填 |
||||
prop |
对公对私标志 |
否 |
String(1) |
0:对公账户 1:个人账户 |
recBankNo |
对方行行号 |
否 |
String(13) |
非跨行支付时,此项上送空值 |
recBankName |
交易对方银行名称 |
否 |
String(60) |
跨行指令此项必输,中文,60位字符。 |
非必填参数(联系我,可增加其他参数) |
||||
recCityName |
收款方所在城市名称 |
否 |
String(30) |
跨行指令(非跨行快汇)此项必输 (经测试,工行内部加急转账不传也可以。) |
isSameCity |
同城异地标志 |
否 |
String(1) |
1:同城 2:异地 |
recICBCCode |
交易对方工行地区号 |
否 |
String(5) |
4位工行地区号 |
postScript |
附言 |
否 |
String(100) |
如果是跨行交易,目前最多只支持60个字符。 |
summary |
摘要 |
否 |
String(20) |
|
sign |
签名 |
是 |
String(32) |
MD5签名 |
返回的参数 |
||||
{ "code": "success", "data": { "out": { "AlertFlag": "0", "BusType": "", "OnlBatF": "1", "PackageName": "", "QrySerialNo": "CMM123456", "QryfSeqno": "", "SettleMode": "0", "rd": { "BankRetTime": "20191219142008", "BankType": "", "BusCode": "", "CrvouhName": "", "CrvouhNo": "", "CrvouhType": "", "CurrType": "001", "ERPSqn": "", "ERPcheckno": "", "EnSummary": "", "FileNames": "", "Indexs": "", "IsSameCity": "1", "MCardName": "", "Oref": "", "PayAccNameCN": "xxx有限公司", "PayAccNameEN": "", "PayAccNo": "付款银行账号", "PayAmt": "1000", "PaySubNo": "", "PayType": "3", "PostScript": "用户提现", "QryOrderNo": "1", "QryiSeqno": "12345678", "RecAccNameCN": "张三", "RecAccNameEN": "", "RecAccNo": "银行卡号", "RecBankName": "中国农业银行股份有限公司", "RecBankNo": "103100000026", "RecCityName": "", "RecICBCCode": "0000", "Ref": "", "ReimburseNo": "", "ReimburseNum": "", "Result": "6", "StartDate": "", "StartTime": "", "Summary ": "用户提现", "SysIOFlg": "2", "UseCN": "用户提现", "UseCode": "", "iRetCode": "0", "iRetMsg": "", "iSeqno": "1", "instrRetCode": "4102", "instrRetMsg": "余额不足" } }, "pub": { "BankCode": "102", "CIS": "证书号码", "ID": "证书ID", "RetCode": "0", "RetMsg": "", "TranDate": "20191220", "TranTime": "140659740", "TransCode": "QPAYENT", "fSeqno": "" } }, "sign": "a4de6cd22eeccf806d47159adb855f12" } |
出金订单查询
发送请求------------http://地址/icbc/QPAYENT.do |
||||
参数名称 |
参数含义 |
必填 |
数据类型 |
说明 |
packageID |
唯一编号 |
是 |
String(32) |
order1575266396000 |
二选一参数 |
||||
qryfSeqno |
出金接口上送的packageID |
否 |
String(32) |
出金上送的参数 |
qrySerialNo |
出金返回的SerialNo |
否 |
String(32) |
出金返回的参数 |
sign |
签名 |
是 |
String(32) |
MD5签名 |
返回的参数 |
||||
{ "code": "success", "data": { "out": { "AlertFlag": "0", "BusType": "", "OnlBatF": "1", "PackageName": "", "QrySerialNo": "CMM123456", "QryfSeqno": "", "SettleMode": "0", "rd": { "BankRetTime": "20191219142008", "BankType": "", "BusCode": "", "CrvouhName": "", "CrvouhNo": "", "CrvouhType": "", "CurrType": "001", "ERPSqn": "", "ERPcheckno": "", "EnSummary": "", "FileNames": "", "Indexs": "", "IsSameCity": "1", "MCardName": "", "Oref": "", "PayAccNameCN": "xxx有限公司", "PayAccNameEN": "", "PayAccNo": "付款银行账号", "PayAmt": "1000", "PaySubNo": "", "PayType": "3", "PostScript": "用户提现", "QryOrderNo": "1", "QryiSeqno": "12345678", "RecAccNameCN": "张三", "RecAccNameEN": "", "RecAccNo": "银行卡号", "RecBankName": "中国农业银行股份有限公司", "RecBankNo": "103100000026", "RecCityName": "", "RecICBCCode": "0000", "Ref": "", "ReimburseNo": "", "ReimburseNum": "", "Result": "6", "StartDate": "", "StartTime": "", "Summary ": "用户提现", "SysIOFlg": "2", "UseCN": "用户提现", "UseCode": "", "iRetCode": "0", "iRetMsg": "", "iSeqno": "1", "instrRetCode": "4102", "instrRetMsg": "余额不足" } }, "pub": { "BankCode": "102", "CIS": "证书号码", "ID": "证书ID", "RetCode": "0", "RetMsg": "", "TranDate": "20191220", "TranTime": "140659740", "TransCode": "QPAYENT", "fSeqno": "" } }, "sign": "a4de6cd22eeccf806d47159adb855f12" } |
需要代码可以联系779293860
非NC模式对接工行接口,工行返回的xml报文转json相关推荐
- java解析xml报文_java 如何解析http请求返回的xml报文
xml报文解析方法有很多种,此处采用dom4j的方法. dom4j的jar包下载地址:https://dom4j.github.io/# 1.request.getInputStream()和new ...
- java httpclient 返回xml_通过httpClient通过post向接口发送xml数据,并处理返回的xml报文...
//maven依赖 org.apache.httpcomponents httpclient 4.5.6 importjava.io.IOException;importjava.net.URI;im ...
- 工行银企互联(NC模式)中间件开发模式
相关NC中间件的文章,已经放到个人公众号("开发谈"栏目),扫码可以进入. 适用对象:自己动手开发银企互联的企业客户. 非官方产品,客户应优先根据官方开发手册自行开发. 开发者免责 ...
- Mr.Fang出品:银企互联(NC模式)开发者版本(.NET WebService中间件,Java、PHP、Python等跨语言测试通过)
相关介绍文章,放入本人的公众号("开发谈"系列),方便读者查阅. 本开发者版本特点: ERP系统只需要通过HTTP协议将参数和发送内容一次性POST到WebService指定页面, ...
- [转]Socket的阻塞模式和非阻塞模式
http://blog.csdn.net/VCSockets/ 阻塞模式 Windows套接字在阻塞和非阻塞两种模式下执行I/O操作.在阻塞模式下,在I/O操作完成前,执行的操作函数一直等候而不会立即 ...
- c# 非阻塞算法_C#阻塞模式和非阻塞模式
阻塞模式 Windows套接字在阻塞和非阻塞两种模式下执行I/O操作.在阻塞模式下,在I/O操作完成前,执行的操作函数一直等候而不会立即返回,该函数所在的线程会阻塞在这里.相反,在非阻塞模式下,套接字 ...
- java SpringBoot 对接支付宝 APP支付 证书模式及非证书模式
一. 添加maven依赖 sdk <dependency><groupId>com.alipay.sdk</groupId><artifactId>al ...
- 非阻塞模式下 SEND 和 RECV 函数的返回值总结
send 和 recv 函数的各种返回值意义: 返回值 n 返回值含义 大于 0 成功发送 n 个字节 0 对端关闭连接 小于 0( -1) 出错或者被信号中断或者对端 TCP 窗口太小数据发不出去( ...
- 网桥接口非混杂模式下数据包转发
网桥接口处在非混杂模式下,只能接收目的MAC地址为自身的数据包,也就是说如果数据包的目的MAC为其它地址,将会被丢弃掉.对于单网口的设备这样没有问题,但是对于存在多个网卡的交换设备,如果从一个网口接收 ...
最新文章
- php使用webuploader表单上传文件覆盖文件key doesn't match with scope的问题和解决思路
- [Spring]IoC容器之进击的注解
- JDBC批量操作批量增加批量修改
- windows服务器修改端口号,windows服务器修改远程连接端口图解
- stm32呼吸灯程序_学习STM32从点灯开始!
- c语言不被O2优化,【图片】今天写几个性能测试,为什么C语言跑得这么慢呢??【c语言吧】_百度贴吧...
- JS代码优化工具Prepack
- 网约车司机用橡胶棍追打女乘客被行政拘留
- 一次线上OOM过程的排查
- [Tomcat]无法使用tomcat6.exe启动服务解决办法
- Xshell安装教程及Xshell安装程序集组件时出错的解决方法
- 男人的梦想:世界名车标志
- 二维数组传参(二维数组作为函数参数)
- 猎人打猎(一)-----简单的实现
- java爬虫抓取nba_利用Python爬虫爬取NBA数据功能实例分享
- Docker中修改Tomcat端口号
- 线段树合并(四道例题)
- 腾讯、新浪、淘宝、搜狐的IP库接口,根据IP显示当地的天气功能
- Oracle Clob类型和Blob类型之间的转换
- append的使用+抽奖(作弊)+打开关闭另一个页面+倒计时