第一次写博客,写得不好请见谅!

公司本来有个旧项目是用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相关推荐

  1. java解析xml报文_java 如何解析http请求返回的xml报文

    xml报文解析方法有很多种,此处采用dom4j的方法. dom4j的jar包下载地址:https://dom4j.github.io/# 1.request.getInputStream()和new ...

  2. java httpclient 返回xml_通过httpClient通过post向接口发送xml数据,并处理返回的xml报文...

    //maven依赖 org.apache.httpcomponents httpclient 4.5.6 importjava.io.IOException;importjava.net.URI;im ...

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

    相关NC中间件的文章,已经放到个人公众号("开发谈"栏目),扫码可以进入. 适用对象:自己动手开发银企互联的企业客户. 非官方产品,客户应优先根据官方开发手册自行开发. 开发者免责 ...

  4. Mr.Fang出品:银企互联(NC模式)开发者版本(.NET WebService中间件,Java、PHP、Python等跨语言测试通过)

    相关介绍文章,放入本人的公众号("开发谈"系列),方便读者查阅. 本开发者版本特点: ERP系统只需要通过HTTP协议将参数和发送内容一次性POST到WebService指定页面, ...

  5. [转]Socket的阻塞模式和非阻塞模式

    http://blog.csdn.net/VCSockets/ 阻塞模式 Windows套接字在阻塞和非阻塞两种模式下执行I/O操作.在阻塞模式下,在I/O操作完成前,执行的操作函数一直等候而不会立即 ...

  6. c# 非阻塞算法_C#阻塞模式和非阻塞模式

    阻塞模式 Windows套接字在阻塞和非阻塞两种模式下执行I/O操作.在阻塞模式下,在I/O操作完成前,执行的操作函数一直等候而不会立即返回,该函数所在的线程会阻塞在这里.相反,在非阻塞模式下,套接字 ...

  7. java SpringBoot 对接支付宝 APP支付 证书模式及非证书模式

    一. 添加maven依赖 sdk <dependency><groupId>com.alipay.sdk</groupId><artifactId>al ...

  8. 非阻塞模式下 SEND 和 RECV 函数的返回值总结

    send 和 recv 函数的各种返回值意义: 返回值 n 返回值含义 大于 0 成功发送 n 个字节 0 对端关闭连接 小于 0( -1) 出错或者被信号中断或者对端 TCP 窗口太小数据发不出去( ...

  9. 网桥接口非混杂模式下数据包转发

    网桥接口处在非混杂模式下,只能接收目的MAC地址为自身的数据包,也就是说如果数据包的目的MAC为其它地址,将会被丢弃掉.对于单网口的设备这样没有问题,但是对于存在多个网卡的交换设备,如果从一个网口接收 ...

最新文章

  1. php使用webuploader表单上传文件覆盖文件key doesn't match with scope的问题和解决思路
  2. [Spring]IoC容器之进击的注解
  3. JDBC批量操作批量增加批量修改
  4. windows服务器修改端口号,windows服务器修改远程连接端口图解
  5. stm32呼吸灯程序_学习STM32从点灯开始!
  6. c语言不被O2优化,【图片】今天写几个性能测试,为什么C语言跑得这么慢呢??【c语言吧】_百度贴吧...
  7. JS代码优化工具Prepack
  8. 网约车司机用橡胶棍追打女乘客被行政拘留
  9. 一次线上OOM过程的排查
  10. [Tomcat]无法使用tomcat6.exe启动服务解决办法
  11. Xshell安装教程及Xshell安装程序集组件时出错的解决方法
  12. 男人的梦想:世界名车标志
  13. 二维数组传参(二维数组作为函数参数)
  14. 猎人打猎(一)-----简单的实现
  15. java爬虫抓取nba_利用Python爬虫爬取NBA数据功能实例分享
  16. Docker中修改Tomcat端口号
  17. 线段树合并(四道例题)
  18. 腾讯、新浪、淘宝、搜狐的IP库接口,根据IP显示当地的天气功能
  19. Oracle Clob类型和Blob类型之间的转换
  20. append的使用+抽奖(作弊)+打开关闭另一个页面+倒计时

热门文章

  1. Excel电子表格向Word文档的导入
  2. Guitar Pro8吉他软件主要功能详解及安装教程
  3. UCenter中上传头像功能的剥离
  4. js连接sqlite(IE内核浏览器适用)
  5. 计网课程设计方案草稿
  6. android viewpager2,Android-ViewPager2的使用
  7. 使用itext7在PDF文件中的指定文字位置添加电子签名图片技术记录
  8. 阿里巴巴73款开源产品列表,值得收藏
  9. 【有限元分析】客车车身设计
  10. 現代政治思想의 發源