JAVA

简介

为了提高客户的接入体验,特提供封装的开发SDK,使用本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);
    }

通用接口调用实例

通用接口 - 「调用实例」