JAVA¶
简介¶
为了提高客户的接入体验,特提供封装的开发SDK,使用本SDK将极大的简化开发者的工作,开发者将无需考虑通信、签名、验签等,只需要关注业务参数的拼装。
版本记录¶
版本 | 日期 | 版本说明 |
---|---|---|
v1.0.0 | 2021/04/22 | 初始版本 |
v1.0.1 | 2021/04/29 | 增加商户进件类接口支持、结构调整 |
v1.1.0 | 2021/07/30 | 增加通用接口支持、结构调整 |
v1.1.1 | 2021/08/11 | SDK版本升级 |
版本要求¶
Java 8
接入方法¶
下载或导入 SDK
下载文件里包含 SDK 和 Demo 两个目录。SDK 目录下为待添加到项目中的jar文件,Demo 目录下为示例项目,供接入时参考使用。
接入本 SDK 需依赖以下第三方库
- httpclient-4.5.2
- httpmime-4.5.2
- fastjson-1.2.70
使用方法¶
系统初始化
在使用 SDK 调用汇付接口前,请先进行商户配置,否则可能导致交易异常。
正常情况下只有一套商户配置,如有业务需求向汇付申请了多套配置信息,也可配置多个商户配置,并做好商户配置命名管理,配置名必须唯一
调用示例
/** debug 模式,开启后有详细的日志
*/
BasePay.debug = true;
/**
* prodMode 模式,默认为生产模式,false可以使用集成测试环境
*/
BasePay.prodMode = true;
/**
* 单商户模式
*/
MerConfig merConfig = new MerConfig();
merConfig.setProcutId("汇付分配产品号");
merConfig.setSysId("汇付分配系统号");
merConfig.setRsaPrivateKey("汇付分配私钥");
merConfig.setRsaPublicKey("汇付分配公钥");
try {
// 单商户模式merchantKey默认为default
BasePay.initWithMerConfig(merConfig);
// 等价于以下
// BasePay.addMerConfig(merConfig, "default");
} catch (Exception ex) {
ex.printStackTrace();
}
调用示例(多商户模式)
/** debug 模式,开启后有详细的日志
*/
BasePay.debug = true;
/**
* prodMode 模式,默认为生产模式,false可以使用集成测试环境
*/
BasePay.prodMode = true;
/**
* 以下为多商户模式,当申请了多套密钥配置时,采用此种方式添加多套配置
*/
Map<String, MerConfig> merConfigs = new HashMap<>();
MerConfig merConfig1 = new MerConfig();
merConfig1.setProcutId("汇付分配产品号1");
merConfig1.setSysId("汇付分配系统号1");
merConfig1.setRsaPrivateKey("汇付分配私钥1");
merConfig1.setRsaPublicKey("汇付分配公钥1");
MerConfig merConfig2 = new MerConfig();
merConfig2.setProcutId("汇付分配产品号2");
merConfig2.setSysId("汇付分配系统号2");
merConfig2.setRsaPrivateKey("汇付分配私钥2");
merConfig2.setRsaPublicKey("汇付分配公钥2");
// 参数1为merchantKey,是商户的唯一标识,商户自定义即可
merConfigs.put("merchantKey1", merConfig1);
merConfigs.put("merchantKey2", merConfig2);
try {
BasePay.initWithMerConfigs(merConfigs);
} catch (Exception ex) {
ex.printStackTrace();
}
接口调用¶
接口调用均由 BasePayClient.request 方法发起,上传文件接口由 BasePayClient.upload 方法发起
/**
* 使用默认商户配置调用汇付支付接口
* @param params 接口参数集合
* @return 返回参数集合
* @throws BasePayException
*/
public static Map<String, Object> request(BaseRequest request) throws BasePayException
/**
* 使用默认商户配置调用汇付支付接口
* @param params 接口参数集合
* @param funcCode 功能编码
* @return 返回参数集合
* @throws BasePayException
*/
public static Map<String, Object> request(Map<String, Object> params, String funcCode) throws BasePayException
/**
* 使用指定商户配置调用汇付支付接口
* @param params 接口参数集合
* @param funcCode 功能编码
* @param merchantKey 商户配置名
* @return 返回参数集合
* @throws BasePayException
*/
public static Map<String, Object> request(Map<String, Object> params, String funcCode, String merchantKey) throws BasePayException;
/**
* 使用默认商户配置调用汇付文件上传
* @param params 结构参数集合
* @param file 要上传的文件对象
* @param funcCode 接口功能编码
* @return 文件上传结果
* @throws BasePayException
*/
public static Map<String, Object> upload(Map<String, Object> params, File file, String funcCode) throws BasePayException
/**
* 使用指定商户配置调用汇付文件上传
* @param params 结构参数集合
* @param file 要上传的文件对象
* @param funcCode 要上传的文件对象
* @param merchantKey 商户配置名
* @return 文件上传结果
* @throws BasePayException
*/
public static Map<String, Object> upload(Map<String, Object> params, File file, String funcCode, String merchantKey) throws BasePayException
params
为请求报文体BODY中的 data
- 「接口规则-参数规定-报文体」 ,需根据调用接口的API说明组装参数。
funcCode
为请求接口的功能编码,请参考 交易接口功能编码、商户管理接口功能编码。
file
为文件上传时文件对象。
merchantKey
为上一步初始化时配置的商户配置key。
接口调用实例¶
以下以聚合反扫接口为例,展示如何使用 SDK 来调用接口。
// 1. 设置商户参数(全局只需设置一次)
BasePay.initWithMerConfig(MerchantConfigDemo.getMerchantConfig());
// 2. 组装交易参数
AuthCodePayRequest request = new AuthCodePayRequest("20210623", "20210705170736631111111111112", "0.01", "287606928207260511", "测试商品");
// 3.拓展参数 (可选)
// 该笔交易的异步通知地址(http/https异步通知地址,必须以virgo://开头)
request.addExtendInfo("notify_url", "virgo://http://www.baidu.com");
Map<String, Object> pullPayInfo = new HashMap<>();
try {
System.out.println("聚合反扫请求参数:" + JSON.toJSONString(dataMap));
// 单商户模式
pullPayInfo = BasePayClient.request(request);
System.out.println("聚合反扫返回参数:" + JSON.toJSONString(pullPayInfo));
} catch (BasePayException e) {
e.printStackTrace();
}
String subRespCode = (String) pullPayInfo.get("sub_resp_code");
if ("00000000".equals(subRespCode)) {
// 业务处理成功
System.out.println("处理成功");
} else if ("00000100".equals(subRespCode)) {
// 聚合反扫返回处理中,等待异步通知结果
// 前台如需要交易结果展示可调用交易查询来获取后续交易状态
} else {
String subRespDesc = (String) pullPayInfo.get("sub_resp_desc");
// 业务处理失败
System.out.println("处理失败,失败信息:" + subRespDesc);
}