工行银企互联接入详解(5)--使用Java调用银企互联接口
点此下载源码及配套资源
本文目录
- 1. 准备工作
- 2. 创建项目
- 3. 查看接口文档
- 4. 编写程序
- 5. 查看结果
1. 准备工作
需要启动NC,然后启动NC里面的Https客户端服务和签名服务。
然后需要确认下NC中间件是启动的,这个上一篇已经说过了。
2. 创建项目
创建web项目或者java控制台项目均可,此处随便创建一个Java Project,并创建一个Test类用于测试,如下图:
3. 查看接口文档
申请银企互联通过后,工行一般会发给接口文档,给我的是每个接口一个excel文件如下:
我们打开《查询当日明细.xls》文件,分析下参数:
- 交易代码:这个地方写死QPD即可
- 集团CIS号:这个就是前文提到的客户编号,这个需要问下工行
- 归属银行编号:这个应该是开户行的机构编号,也是需要问下工行工作人员
- 证书ID:再次出现证书ID了,这个就是类似于FangNC3.y.1102的文本
- 交易日期:NC中间件已经帮我们封装了,此处填写NotCare即可
- 交易时间:NC中间件已经帮我们封装了,此处填写NotCare即可
- 指令包序列号:NC中间件已经帮我们封装了,此处填写01即可
- 查询账号:这个是要查询的对公账号
- 地区代码:区域号,一般为四位,这个需要问下工行工作人员
- 发生额下限:填写0即可
- 发生额上线:填写0即可
- 其余选填项,填空即可
大部分都好理解,有个NC中间件已经封装的,解释如下,详细解释地址
完整的XML报文中关键信息说明:1)、CIS、ID 将与Web.Config中的信息做校验。2)、TranDate、TranTime、SignTime 等用户输入值将被忽略,由程序自动填充。3)、如 XML中fSeqno长度<=3,则程序会使用自己产生的流水号。个人建议:查询类的报文该字段可以空白或输入长度小于3的内容,交易类的请指定fseqno 内容(长度>3),避免发送请求后没有接收到回执而无从判断银行究竟接收到了指令没有。4)、支持压缩模式提交大批量指令:rd 最外层头尾套<zip>、</zip>即可,比如:……<zip><rd>……</rd>……<rd>……</rd></zip>……5)、程序自动替换内容的空白节点请使用<node></node>这种格式,如果写成<node/>这种,程序无法自动填充其数值。TranDate、TranTime、SignTime等字段,程序将自动补充,为避免部分系统自动将<TranDate></TranDate>变成<TranDate/>这种格式,可以随意输入些内容,比如<TranDate>NotCare</TranDate>。
4. 编写程序
按照DEMO编写程序即可,如下所示:
package org.panda.demo;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.Base64;public class Test {//测试入口public static void main(String[] args) throws Exception {Base64.Decoder decoder = Base64.getDecoder();Base64.Encoder encoder = Base64.getEncoder();String xml_text = "<?xml version=\"1.0\"encoding=\"GBK\"?>"+ "<CMS>"+ "<eb>"+ "<pub>"+ "<TransCode>QPD</TransCode>"+ "<CIS>xxxx</CIS>" //注意此处填写真实CIS+ "<BankCode>xxxx</BankCode>" //注意此处填写真实BankCode+ "<ID>xxxx</ID>" //注意此处填写真实证书ID+ "<TranDate>NotCare</TranDate>"+ "<TranTime>NotCare</TranTime>"+ "<fSeqno>01</fSeqno>"+ "</pub>"+ "<in>"+ "<AccNo>xxxx</AccNo>" //注意此处填写真实账号+ "<AreaCode>xxxx</AreaCode>" //注意此处填写地区编号+ "<MinAmt>0</MinAmt>"+ "<MaxAmt>0</MaxAmt>"+ "<BeginTime></BeginTime>"+ "<EndTime></EndTime>"+ "<NextTag></NextTag>"+ "<ReqReserved1></ReqReserved1>"+ "<ReqReserved2></ReqReserved2>"+ "<CurrType></CurrType>"+ "<AcctSeq></AcctSeq>"+ "</in>"+ "</eb>"+ "</CMS>";byte[] textByte = xml_text.getBytes("GBK");String encodedText = encoder.encodeToString(textByte);String retMsg = sendPost("http://192.168.20.2:666/WebService.asmx/ICBC_YQHL","ver=0.0.1.0&b64_xml=" + encodedText);//注意此处192.168.20.2应填写真实NC中间件设备地址int p1 = retMsg.indexOf("ReqResult=");int p2 = retMsg.indexOf("</string>");String realMsg=new String(decoder.decode(retMsg.substring(p1+10,p2)),"GBK");System.out.println(realMsg);}//发送Http请求public static String sendPost(String url, String param) {PrintWriter out = null;BufferedReader in = null;String result = "";try {URL realUrl = new URL(url);URLConnection conn = realUrl.openConnection();conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");conn.setRequestProperty("Accept-Charset", "utf-8");conn.setRequestProperty("contentType", "utf-8");conn.setDoOutput(true);conn.setDoInput(true);out = new PrintWriter(conn.getOutputStream());out.print(param);out.flush();in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));String line;while ((line = in.readLine()) != null) {result += line;}} catch (Exception e) {System.out.println("发送 POST 请求出现异常!" + e);e.printStackTrace();} finally {try {if (out != null) {out.close();}if (in != null) {in.close();}} catch (IOException ex) {ex.printStackTrace();}}return result;}
}
5. 查看结果
如下图:RetCode为0,应该是表示返回成功了,后面还有一大片报文,excel文件里面描述的很清楚了,按照描述对xml报文进行处理即可。
工行银企互联接入详解(5)--使用Java调用银企互联接口相关推荐
- 工行银企互联接入详解(4)--NC中间件部署
点此下载源码及配套资源 本文目录 1. 背景 2. 原理 3. 声明 4. 部署流程 4.1 下载并解压NC中间件 4.2 修改Web.Config文件,如下图: 4.3 启用IIS功能 4.4 在I ...
- 工行银企互联接入详解(3)--启动NC
点此下载源码及配套资源 本文目录 1. 背景 2. 打开NC 3. 配置Https客户端 4. 配置签名服务 5. 启动NC 1. 背景 我们的程序通过NC与工行服务进行交互,所以需要配置NC的参数, ...
- 工行银企互联接入详解(2)--下载证书
点此下载源码及配套资源 本文目录 1. 下载NC3.1 2. 启动NC 3. 进入下载证书页面 4. 配置参数 5. 下载证书 6. 其他 1. 下载NC3.1 NC是工行提供工具,通过NC可以将证书 ...
- Sentry For Vue 完整接入详解(2021 Sentry v21.8.x)前方高能预警!三万字,慎入!
内容源于:https://docs.sentry.io/platforms/javascript/guides/vue/ 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创 ...
- android 支付宝sdk接入详解
android 支付宝sdk接入详解 第一步 在接入支付宝sdk之前首先要进入支付宝开发者平台申请应用所需要的应用唯一标识(APPID).应用私钥(APP_PRIVATE_KEY).支付宝公钥(ALI ...
- Android移动支付(支付宝支付2017最新接入详解)
接入流程 一:公司开通支付宝商户号 二:注册登录蚂蚁金服开放平台创建应用 三:项目集成支付宝SDK 一:公司开通支付宝商户号 1 注册商户号:https://mobiless.alipay.com ...
- 微信服务号及支付功能接入详解
本文同步至个人博客 微信服务号及支付功能接入详解,转载请注明出处 最近在实现微信服务号支付功能,这边对接入商户资料审核及接口接入相关内容进行梳理. 旨在理清相关帐号的申请流程.整理服务开通.开发数据的 ...
- 详解Scala与Java的互动
详解Scala与Java的互动
- JAVA使用摄像头录制_JavaCV开发详解之1:调用本机摄像头视频(建议使用javaCV最新版本)...
引入依赖 org.bytedeco javacv 1.5.3 org.bytedeco javacv-platform 1.5.3 代码实现 package com.java.mmzsblog; im ...
最新文章
- Android ActionBarDrawerToggle、DrawerLayout、ActionBar 结合
- 大数据时代云计算在新媒体平台的应用研究
- python【力扣LeetCode算法题库】100-相同的树
- 自己动手丰衣足食之 jQuery 数量加减插件
- mysql coreseek_centos+php+coreseek+sphinx+mysql之一coreseek安装篇
- linux下调试工具的应用
- ReentrantLock可重入锁
- nginx的模块化体系结构
- layout_gravity和gravity的区别
- warning: control reaches end of non-void function:错误解决
- 比特币 以太坊 真的是去中心化的吗?
- Linux下编译安装LAMP并分离为多台服务器
- 黑莓手机刷linux,【教程】黑莓手机 BlackBerry DM6.0 完整刷机教程 含瘦身方法...
- 国家统计局 2019年省市区数据(自取)
- Asterisk增加g729编码支持
- 股票买卖问题-含手续费
- JavaWeb(Request、BeanUtils)
- BCM wifi分析
- SC系列(SC-12S)低频率小型SMD石英晶振SC-12S32.768KHZ12.5PF/20PPM
- SQL的语法与分类,语法示例+图片,贼吉尔详细!!!