工商银行支付接口开发Java

工商银行支付接口开发Java

  • 工银聚融资开发
  • 工行E企付B2B接口开发
  • 工行B2C接口开发(待定)

工银聚融资开发

一.开发步骤
1.首要的跟工行对接人员要到参考demo,里面有需要用到的工行jar包,以及各个接口代码;
2.根据工行要求下载OpenSSL生成公私钥对,公钥提供给工行,私钥自己在调接口时传入;
3.在项目web-inf目录下面,创建文件夹存放cer证书,在调用工行接口时需要传入.
工商银行支付接口开发Java_第1张图片
二.以融资单据上传接口为例
1.拼接请求报文,按照工行接口文档中的格式拼接就行,这里就不展示完整的了
工商银行支付接口开发Java_第2张图片
工商银行支付接口开发Java_第3张图片
2.将拼接的报文转换成Base64格式
在这里插入图片描述
对应代码:
public static String base64Encode(String data,String charset){
String b64Reqdata ;
BASE64Encoder b64enc = new BASE64Encoder();
try {
b64Reqdata = b64enc.encode(data.getBytes(charset));
//数据去空格与转行字符
b64Reqdata = b64Reqdata.replaceAll("\r\n", “”).replaceAll("\n","");
b64Reqdata = b64Reqdata.replaceAll("\n", “”);
} catch (Exception e) {
return null;
}
return b64Reqdata;
}
3.创建工行融资接口请求参数对象
在这里插入图片描述
4.创建接口请求对象
在这里插入图片描述
5.调用工行接口,获取响应
工商银行支付接口开发Java_第4张图片
6.完整代码
public ApplyOnlinePayResponse orderUpload(List orderInfoDtos, String transCode) {
ApplyOnlinePayResponse payResponse = new ApplyOnlinePayResponse();
//1.加载交易报文
StringBuilder reqdata = new StringBuilder();
//1.1加载公共部分报文
reqdata.append(MessageCreateUtil.commonMessage(transCode, icbcLoanBean.getMerid()));
//1.2加载入参报文
reqdata.append(MessageCreateUtil.orderMessage(orderInfoDtos));
//1.3明文数据转换成base64数据方式
String b64Reqdata = Tool.base64Encode(reqdata.toString(), icbcLoanBean.getCharset());
ApiRequest req = new ApiRequest(icbcLoanBean.getApiurl(), “com.icbc.gyj.eloansplus.orderupload”, icbcLoanBean.getAppid());
req.setRequestField(“version”, Constants.VERSION);
req.setRequestField(“charset”, icbcLoanBean.getCharset());
req.setRequestField(“merid”, icbcLoanBean.getMerid());
req.setRequestField(“trancode”, transCode);
req.setRequestField(“reqdata”, b64Reqdata);
try {
//调用工行接口
ApiClient ac = new ApiClient(icbcLoanBean.getPriKey(), new Tool().getWEBINFPath() + icbcLoanBean.getPubPath());
//响应对象
ApiResponse ar = ac.execute(req);
//解析响应 获取data
IcbcResponse icbcResponse = getRespone(ar);
Element root = icbcResponse.getElement();
//封装xx需要的对象
if (!Constants.STRING_CODE_000.equals(icbcResponse.getStatus())) {
//若状态不为000则表示工行接口问题
payResponse.setPayHttpStatus(xxx);
} else {
if (Constants.STRING_CODE_200.equals(icbcResponse.getRetCode())) {
List uploadRes = new ArrayList();

                Element rds = root.element("out");
                List rdnodes = rds.elements("rd");
                //获取单据上传的反馈信息
                for (Element rdnode : rdnodes) {
                    OrderUploadRes orderUploadRes = new OrderUploadRes();
                    orderUploadRes.setOrderNo(rdnode.elementText("OrderNo"));
                    String uploadStatus = rdnode.elementText("UploadStatus");
                    String uploadMessage = rdnode.elementText("UploadMessage");
                    if ("0".equals(uploadStatus)) {
                        //可能是参数问题
                        payResponse.setPayHttpStatus(PayHttpStatus.PARAMETRIC_FAILED);
                        return payResponse;
                    }
                    orderUploadRes.setUploadStatus(uploadStatus);
                    orderUploadRes.setUploadMessage(uploadMessage);
                    uploadRes.add(orderUploadRes);
                }
                payResponse.setObj(uploadRes);
                payResponse.setPayHttpStatus(PayHttpStatus.OK);
            } else {
                //可能是参数问题

            }
        }
    } catch (Exception e) {

    }
    return payResponse;
}

**

工行E企付B2B接口开发

**
一.前期准备,B2B接口跟融资接口调用不太一样
1.该类接口除了需要用到自己生成的公私钥之外,还需要工行提供的"网关公钥"
在这里插入图片描述
工商银行支付接口开发Java_第5张图片
二.开发步骤
1.以支付申请查询接口为例,入参对象,请求对象,响应对象都是工行jar包里面的

MybankPayCpayCporderqueryRequestV1 request = new MybankPayCpayCporderqueryRequestV1();

request.setServiceUrl(“https://”+icbcIP+":"+icbcPort+"/api/mybank/pay/cpay/cporderquery/V2");

MybankPayCpayCporderqueryRequestV1.QueryPayApplyRequestV1Biz bizContent = new MybankPayCpayCporderqueryRequestV1.QueryPayApplyRequestV1Biz();
bizContent.setAgreeCode(agreeCode);
bizContent.setOrderCode(infoDto.getOrderId());
bizContent.setPartnerSeq(infoDto.getPartnerSeq());

request.setBizContent(bizContent);

 try {
        MybankPayCpayCporderqueryResponseV1 responseV1 = excuteIcbcB2b(request);
    if (responseV1.isSuccess()) {
            payResponse.setPayHttpStatus(PayHttpStatus.OK);
            payResponse.setObj(responseV1);
        } else {
            payResponse.setPayHttpStatus(PayHttpStatus.PARAMETRIC_FAILED);
        }
    } catch (Exception e) {
        payResponse.setPayHttpStatus(PayHttpStatus.API_FAILED);
        return payResponse;
    }
    return payResponse;
}	

	2.注意:工行B2B模块测试环境时间不是当前时间,当出现提示"终端上送工作日期和主机系统日期不一致"时,需要跟工行人员询问当前的测试环境时间.

工行B2C接口开发(待定)

总的来说,工行支付接口对接还是挺简单的,主要是跟工行人员多沟通,有什么不懂的就问.但是坑就坑在B2B 跟 B2C 两个模块的对接人员太拖拉,而且不一定是让开发人员来对接,而是让测试人员来对接,一旦出现什么问题就会要求你对照demo上的代码.耗费了我不少时间~~~坑

你可能感兴趣的:(工商银行支付接口开发Java)