Java SDK 使用文档

简介

目前 Adapay 的 Java SDK 支持的交易模块包括 支付(Payment)、退款(Refund)、查询、关单功能,用户对象,结算账户,企业用户等功能,具体可参考 API文档

下载地址

SDK下载

SDK 版本记录

版本

日期

说明

v1.2.10

2021-08-26

新增支付http请求独立连接池功能

v1.2.9

2021-08-19

新增文件请求通用方法

v1.2.8

2021-08-16

新增http请求超时功能

v1.2.7

2021-07-14

常规优化

v1.2.6

2021-04-16

新增通用接口调用功能

v1.2.4

2021-01-20

新增服务商分账及查询接口

v1.2.3

2020-12-03

新增快捷卡接口

v1.2.2

2020-11-18

新增账户冻结解冻接口

v1.2.1

2020-11-05

新增账户转账接口

v1.2.0

2020-10-29

优化代码规范

v1.1.4

2020-10-23

优化HttpClientUtils及消息监听重连功能

版本要求

Java 8

接入方法

  • 下载或导入 SDK

Maven项目导入如下两个依赖,最新版本为 1.2.10

<!-- https://mvnrepository.com/artifact/com.huifu.adapay.core/adapay-core-sdk -->
<dependency>
  <groupId>com.huifu.adapay.core</groupId>
  <artifactId>adapay-core-sdk</artifactId>
  <version>1.2.10</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.huifu.adapay/adapay-java-sdk -->
<dependency>
  <groupId>com.huifu.adapay</groupId>
  <artifactId>adapay-java-sdk</artifactId>
  <version>1.2.10</version>
</dependency>

下载文件里包含 SDK 和 Demo 两个目录。SDK 目录下为待添加到项目中的文件,两个 jar 包都需添加,Demo 目录下为示例项目,供接入时参考使用。

  • 上传 RSA 公钥

您需要在本地生成一对 RSA 公私钥,将生成的公钥内容上传到 「控制台」 ->「商户信息管理」->「证书管理」->「商户公钥」

证书生成方法具体详见帮助中心 证书生成

  • 下载配置文件

配置文件获取路径: 「控制台」 ->「商户信息管理」->「证书管理」->「导出配置文件」

_images/certManager.png
  • 导入第三方依赖库

接入本 SDK 需依赖以下第三方库

httpclient-4.5.2
fastjson-1.2.48
httpmime-4.5.2
  • 异步监听

SDK 需要设置异步监听,请启动异步监听,以实现异步通知处理。详情请参考 异步消息

注意:请在异步通知接口调用参数中传入 notify_url 通过 Webhook 的形式实现异步结果处理。

使用方法

  • 系统初始化

在使用 Adapay 前,请先添加商户配置文件,并完成系统初始化设置,否则可能导致交易异常。

如贵司为普通商户,正常情况下只有一个商户配置文件

如贵司为 SASS 商户,请传入多个商户配置文件,并做好配置文件命名管理,所有文件名必须唯一

  • 调用示例

/**
  * debug 模式,开启后有详细的日志
  */
Adapay.debug = false;

/**
  * prodMode 模式,默认为生产模式,false可以使用mock模式
  */
Adapay.prodMode = true;

/**
  * 初始化商户配置,服务器启动前,必须通过该方式初始化商户配置完成
  * apiKey为prod模式的API KEY
  * mockApiKey为mock模式的API KEY
  * rsaPrivateKey为商户发起请求时,用于请求参数加签所需要的RSA私钥
  */
String apiKey = "api_live_9c14f264-e390-41df-984d-df15a6952031";
String mockApiKey = "api_test_e640fa26-bbe6-458f-ac44-a71723ee2176";
String rsaPrivateKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMQhsygJ2pp4nCiDAXiqnZm6AzKSVAh+C0BgGR6QaeXzt0TdSi9VR0OQ7Qqgm92NREB3ofobXvxxT+wImrDNk6R6lnHPMTuJ/bYpm+sx397rPboRAXpV3kalQmbZ3P7oxtEWOQch0zV5B1bgQnTvxcG3REAsdaUjGs9Xvg0iDS2tAgMBAAECgYAqGFmNdF/4234Yq9V7ApOE1Qmupv1mPTdI/9ckWjaAZkilfSFY+2KqO8bEiygo6xMFCyg2t/0xDVjr/gTFgbn4KRPmYucGG+FzTRLH0nVIqnliG5Ekla6a4gwh9syHfstbOpIvJR4DfldicZ5n7MmcrdEwSmMwXrdinFbIS/P1+QJBAOr6NpFtlxVSGzr6haH5FvBWkAsF7BM0CTAUx6UNHb+RCYYQJbk8g3DLp7/vyio5uiusgCc04gehNHX4laqIdl8CQQDVrckvnYy+NLz+K/RfXEJlqayb0WblrZ1upOdoFyUhu4xqK0BswOh61xjZeS+38R8bOpnYRbLf7eoqb7vGpZ9zAkEAobhdsA99yRW+WgQrzsNxry3Ua1HDHaBVpnrWwNjbHYpDxLn+TJPCXvI7XNU7DX63i/FoLhOucNPZGExjLYBH/wJATHNZQAgGiycjV20yicvgla8XasiJIDP119h4Uu21A1Su8G15J2/9vbWn1mddg1pp3rwgvxhw312oInbHoFMxsQJBAJlyDDu6x05MeZ2nMor8gIokxq2c3+cnm4GYWZgboNgq/BknbIbOMBMoe8dJFj+ji3YNTvi1MSTDdSDqJuN/qS0=";

MerConfig merConfig = new MerConfig();
merConfig.setApiKey(apiKey);
merConfig.setApiMockKey(mockApiKey);
merConfig.setRSAPrivateKey(rsaPrivateKey);

Adapay.initWithMerConfig(merConfig);
  • 调用示例(多商户模式)

/**
  * debug 模式,开启后与详细的日志
  */
Adapay.debug = true;

/**
  * prodMode 模式,默认为生产模式,false可以使用mock模式
  */
Adapay.prodMode = true;

String apiKey1 = "api_live_9c14f264-e390-41df-984d-df15a6952031";
String mockApiKey1 = "api_test_e640fa26-bbe6-458f-ac44-a71723ee2176";
String rsaPrivateKey1 = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMQhsygJ2pp4nCiDAXiqnZm6AzKSVAh+C0BgGR6QaeXzt0TdSi9VR0OQ7Qqgm92NREB3ofobXvxxT+wImrDNk6R6lnHPMTuJ/bYpm+sx397rPboRAXpV3kalQmbZ3P7oxtEWOQch0zV5B1bgQnTvxcG3REAsdaUjGs9Xvg0iDS2tAgMBAAECgYAqGFmNdF/4234Yq9V7ApOE1Qmupv1mPTdI/9ckWjaAZkilfSFY+2KqO8bEiygo6xMFCyg2t/0xDVjr/gTFgbn4KRPmYucGG+FzTRLH0nVIqnliG5Ekla6a4gwh9syHfstbOpIvJR4DfldicZ5n7MmcrdEwSmMwXrdinFbIS/P1+QJBAOr6NpFtlxVSGzr6haH5FvBWkAsF7BM0CTAUx6UNHb+RCYYQJbk8g3DLp7/vyio5uiusgCc04gehNHX4laqIdl8CQQDVrckvnYy+NLz+K/RfXEJlqayb0WblrZ1upOdoFyUhu4xqK0BswOh61xjZeS+38R8bOpnYRbLf7eoqb7vGpZ9zAkEAobhdsA99yRW+WgQrzsNxry3Ua1HDHaBVpnrWwNjbHYpDxLn+TJPCXvI7XNU7DX63i/FoLhOucNPZGExjLYBH/wJATHNZQAgGiycjV20yicvgla8XasiJIDP119h4Uu21A1Su8G15J2/9vbWn1mddg1pp3rwgvxhw312oInbHoFMxsQJBAJlyDDu6x05MeZ2nMor8gIokxq2c3+cnm4GYWZgboNgq/BknbIbOMBMoe8dJFj+ji3YNTvi1MSTDdSDqJuN/qS0=";


MerConfig merConfig1 = new MerConfig();
merConfig1.setApiKey(apiKey1);
merConfig1.setApiMockKey(mockApiKey1);
merConfig1.setRSAPrivateKey(rsaPrivateKey1);

String apiKey2 = "api_live_9c14f264-e390-41df-984d-df15a6952031";
String mockApiKey2 = "api_test_e640fa26-bbe6-458f-ac44-a71723ee2176";
String rsaPrivateKey2 = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMQhsygJ2pp4nCiDAXiqnZm6AzKSVAh+C0BgGR6QaeXzt0TdSi9VR0OQ7Qqgm92NREB3ofobXvxxT+wImrDNk6R6lnHPMTuJ/bYpm+sx397rPboRAXpV3kalQmbZ3P7oxtEWOQch0zV5B1bgQnTvxcG3REAsdaUjGs9Xvg0iDS2tAgMBAAECgYAqGFmNdF/4234Yq9V7ApOE1Qmupv1mPTdI/9ckWjaAZkilfSFY+2KqO8bEiygo6xMFCyg2t/0xDVjr/gTFgbn4KRPmYucGG+FzTRLH0nVIqnliG5Ekla6a4gwh9syHfstbOpIvJR4DfldicZ5n7MmcrdEwSmMwXrdinFbIS/P1+QJBAOr6NpFtlxVSGzr6haH5FvBWkAsF7BM0CTAUx6UNHb+RCYYQJbk8g3DLp7/vyio5uiusgCc04gehNHX4laqIdl8CQQDVrckvnYy+NLz+K/RfXEJlqayb0WblrZ1upOdoFyUhu4xqK0BswOh61xjZeS+38R8bOpnYRbLf7eoqb7vGpZ9zAkEAobhdsA99yRW+WgQrzsNxry3Ua1HDHaBVpnrWwNjbHYpDxLn+TJPCXvI7XNU7DX63i/FoLhOucNPZGExjLYBH/wJATHNZQAgGiycjV20yicvgla8XasiJIDP119h4Uu21A1Su8G15J2/9vbWn1mddg1pp3rwgvxhw312oInbHoFMxsQJBAJlyDDu6x05MeZ2nMor8gIokxq2c3+cnm4GYWZgboNgq/BknbIbOMBMoe8dJFj+ji3YNTvi1MSTDdSDqJuN/qS0=";


MerConfig merConfig2 = new MerConfig();
merConfig2.setApiKey(apiKey2);
merConfig2.setApiMockKey(mockApiKey2);
merConfig2.setRSAPrivateKey(rsaPrivateKey2);

Map<String, MerConfig>configPathMap = new HashMap<>();
//参数1为merchantKey,是商户的唯一标识,商户自定义即可
configPathMap.put("yifuyun", merConfig1);
configPathMap.put("yidian", merConfig2);

Adapay.initWithMerConfigs(configPathMap);

注意: 多商户的情况调用以下接口时,需传入对应商户配置文件的 key,商户需维护好多个配置文件 与 key 值映射

支付对象

发起支付

当您想发起一次支付请求时需要通过 Adapay 提供的创建方法获取一个新的 Payment对象,您可使用此 Payment对象 发起支付。对于支付结果,Adapay 会发送 异步消息 告知。

  • 调用示例

Map<String, Object> paymentParams = new HashMap<String, Object>(10);
paymentParams.put("app_id", "your appid");
paymentParams.put("order_no", "jsdk_payment"+System.currentTimeMillis());
paymentParams.put("pay_channel", PayChannelEnum.ALIPAY_QR.getCode());
paymentParams.put("pay_amt", "0.01");
paymentParams.put("goods_title", "your goods title");
paymentParams.put("goods_desc", "your goods desc");
paymentParams.put("div_members", "");
Map<String, Object> payment = Payment.create(paymentParams, merchantKey);
System.out.println("payment result="+JSON.toJSONString(payment));
  • 参数说明

调用参数详见 创建支付

支付订单查询

查询已存在的 Payment对象

  • 调用示例

Map<String, Object> payment = Payment.query(paymentId, merchantKey);
System.out.println("query result="+JSON.toJSONString(payment));
  • 参数说明

调用参数详见 支付查询

查询支付对象列表

通过该接口,实现对已发起的支付对象查询功能,支持使用请求订单号、支付对象id、以及按时间范围分页查询。

  • 调用示例

Map<String, Object> params = new HashMap<>();
params.put("order_no", System.currentTimeMillis());
params.put("pay_amt", "0.01");
params.put("currency", "cny");
params.put("goods_title", "goods");
params.put("goods_desc", "goodsdesc");
params.put("app_id", "app_f8b14a77-dc24-433b-864f-98a62209d6c4");
params.put("callback_url", "https://www.xxx.com/");

//调用sdk方法,得到支付对象列表
Map<String, Object> payment = new HashMap<>();
try {
    System.out.println("查询支付对象列表,请求参数:" + JSON.toJSONString(params));
    payment = Payment.queryList(params, merchantKey);
} catch (BaseAdaPayException e) {
    e.printStackTrace();
}
  • 请求参数

调用参数详见 支付对象列表查询

关闭订单

针对已经创建的 Payment对象,您可以调用关单接口进行交易的关闭。

  • 调用示例

Map<String, Object> paymentParams = new HashMap<>(10);
paymentParams.put("payment_id", paymentId);
paymentParams.put("reason", "reason");
paymentParams.put("expend", "expend");
paymentParams.put("notify_url", "notify_url");
payment = Payment.close(paymentParams);
  • 参数说明

调用参数详见 关单

退款对象

发起退款

当您的业务需要发起退款时,可通过 Adapay 系统提供的创建 Refund对象 方法创建一个退款对象,发起退款请求。

  • 调用示例

Map<String, Object> refundParams = new HashMap<String, Object>(2);
refundParams.put("refund_amount", "0.01");
refundParams.put("app_id", "your appid");
refundParams.put("refund_order_no", "jsdk_refund_"+System.currentTimeMillis());
Map<String, Object> refund = Refund.create(payment_id, refundParams, merchantKey);
System.out.println("refund result="+JSON.toJSONString(refund));
  • 参数说明

调用参数详见 创建退款

退款订单查询

通过 Refund对象 的 id 查询一个已创建的退款记录。

  • 调用示例

Map<String, Object> paymentParams = new HashMap<String, Object>(1);
paymentParams.put("refund_id", refund_id);
Map<String, Object> refund = Refund.query(paymentParams, merchantKey);
System.out.println("query by refund_id refund result="+JSON.toJSONString(refund));
  • 参数说明

调用参数详见 退款查询

支付确认对象

创建支付确认对象

创建支付确认对象适用于延时分账的场景。只有已支付完成且延时分账的 Payment对象,才支持调用创建支付确认对象。支持一次全额或多次部分确认,多次部分确认时,当前确认金额 + 已确认金额 + 已撤销金额不能大于原支付金额。

  • 调用示例

Map<String, Object> confirm = new HashMap<>();
confirm.put("payment_id", paymentId);
confirm.put("order_no", "jsdk_confirm_" + System.currentTimeMillis());
confirm.put("confirm_amt", "0.01");
confirm.put("description", "description");
confirm.put("div_members", "");
confirm = PaymentConfirm.create(confirm);
//多商户时传入 merchantKey
//confirm = PaymentConfirm.create(confirm, merchantKey);
  • 参数说明

调用参数详见 创建支付确认对象

查询支付确认对象

查询已经创建的支付确认对象

  • 调用示例

Map<String, Object> confirm = new HashMap<>();
confirm.put("payment_confirm_id", payment_confirm_id);
confirm = PaymentConfirm.query(confirm);
//多商户时传入 merchantKey
//confirm = PaymentConfirm.query(confirm, merchantKey);
  • 参数说明

调用参数详见 查询支付确认对象

查询支付确认对象列表

查询已经创建的支付确认对象列表

  • 调用示例

Map<String, Object> confirm = new HashMap<>();
confirm.put("payment_id", payment_id);
confirm.put("app_id", app_id);
confirm.put("page_index", "1");
confirm.put("page_size", "20");
confirm.put("created_gte", "1571913867");
confirm.put("created_lte", "1571913923");
confirm = PaymentConfirm.queryList(confirm);
//多商户时传入 merchantKey
//confirm = PaymentConfirm.queryList(confirm, merchantKey);
  • 参数说明

调用参数详见 查询支付确认对象列表

支付撤销对象

创建支付撤销对象

创建支付确认对象适用于延时分账的场景。只有已支付完成且延时分账的 Payment对象,才支持调用创建支付确认对象。支持一次全额或多次部分确认,多次部分确认时,当前确认金额 + 已确认金额 + 已撤销金额不能大于原支付金额。

  • 调用示例

Map<String, Object> reverse = new HashMap<>();
reverse.put("payment_id", paymentId);
reverse.put("app_id", app_id);
reverse.put("order_no", "jsdk_reverse_" + System.currentTimeMillis());
reverse.put("app_id", app_id);
reverse.put("notify_url", "");
reverse.put("reverse_amt", "0.01");
reverse.put("reason", "reason");
reverse.put("expand", "expend");
reverse.put("device_info", "device_info");
reverse = PaymentReverse.create(reverse);
//多商户时传入 merchantKey
//reverse = PaymentReverse.create(reverse, merchantKey);
  • 参数说明

调用参数详见 创建支付撤销对象

查询支付撤销对象

查询已经创建的支付撤销对象

  • 调用示例

Map<String, Object> reverse = new HashMap<>();
reverse.put("reverse_id", reverse_id);
reverse = PaymentReverse.query(reverse);
//多商户时传入 merchantKey
//reverse = PaymentReverse.query(reverse, merchantKey);
  • 参数说明

调用参数详见 查询支付撤销对象

查询支付撤销对象列表

查询已经创建的支付撤销对象列表

  • 调用示例

Map<String, Object> reverse = new HashMap<>();
reverse.put("payment_id", payment_id);
reverse.put("app_id", app_id);
reverse.put("page_index", "1");
reverse.put("page_size", "20");
reverse.put("created_gte", "1571913923");
reverse.put("created_lte", "1571913924");
reverse = PaymentReverse.queryList(reverse);
//多商户时传入 merchantKey
//reverse = PaymentReverse.queryList(reverse, merchantKey);
  • 参数说明

调用参数详见 查询支付撤销对象列表

支付确认撤销对象

创建支付确认撤销对象

接口说明: 创建支付确认撤销对象适用于延时分账的场景。只有已支付完成且为延时分账的 Payment 对象,在创建支付确认对象成功之后,可以调用创建支付确认撤销对象,用来撤销支付确认订单,资金会退回到商户的临时过渡户中。 仅支持支付确认订单的全额撤销,不支持发生过退款的支付确认订单再发起撤销。

注:创建支付确认撤销对象同步返回成功,表示 Adapay 处理成功,资金实时退回到商户的临时过渡户中,可再次发起支付确认请求。支付确认撤销请求无时间限制,若支付确认撤销后再发起支付撤销请求时最长时间仍为原支付订单可退款时长(一般为178天以内)

  • 调用示例

Map<String, Object> confirmReverseParams = new HashMap<>();
confirmReverseParams.put("adapay_func_code", "payments.confirm.reverse");
confirmReverseParams.put("payment_confirm_id", "002112025392021504");
confirmReverseParams.put("reason", "test");
confirmReverseParams.put("order_no", "jsdk_confirm_reverse000000");
Map<String, Object> confirmReverseResult = AdapayCommon.requestAdapay(confirmReverseParams);
  • 参数说明

调用参数详见 创建支付确认撤销对象

查询支付确认撤销对象

查询已经创建的支付确认撤销对象

  • 调用示例

Map<String, Object> confirmReverseQueryParams = new HashMap<>();
confirmReverseQueryParams.put("adapay_func_code", "payments.confirm.reverse.details");
confirmReverseQueryParams.put("order_no", "test_confirm_reverse_2023042000000");
confirmReverseQueryParams.put("payment_confirm_id", "0000211201910241");
confirmReverseQueryParams.put("payment_confirm_reverse_id", "00211201910241368032");
Map<String, Object> confirmReverseQueryResult = AdapayCommon.queryAdapay(confirmReverseQueryParams);
  • 参数说明

调用参数详见 查询支付确认撤销对象

个人用户对象

创建用户对象

创建用户对象用于将商户 member_id 与 Adapay 系统做关联,商户需要保证 member_id 在应用 app_id 下唯一。关联完成后,可以创建结算账户用于用户分账功能。

  • 调用示例

Map<String, Object> memberParams = new  HashMap<String, Object>(2);
memberParams.put("member_id", "jsdk_member\_"+System.currentTimeMillis());
memberParams.put("app_id",app_id);
memberParams.put("location", "上海市徐汇区宜山路");
memberParams.put("email", "123@163.com");
memberParams.put("gender", "MALE");
memberParams.put("tel_no", "13153333333");
memberParams.put("nickname", "nick_name");
Map<String, Object> member = Member.create(memberParams, merchantKey);
  • 参数说明

调用参数详见 创建用户对象

查询用户对象

查询已创建的单个用户对象

  • 调用示例

Map<String, Object> memberParams = new  HashMap<String, Object>(2);
memberParams.put("member_id", member_id);
memberParams.put("app_id", app_id);
Map<String, Object> member = Member.query(memberParams, merchantKey);
  • 参数说明

调用参数详见 查询用户对象

查询用户对象列表

对创建完成用户对象更新用户基本信息,可对用户状态禁用,禁用后用户不能做其它交易。

  • 调用示例

Map<String, Object> memberParams = new  HashMap<String, Object>(2);
memberParams.put("page_index", "1");
memberParams.put("app_id", app_id);
memberParams.put("page_size", "20");
memberParams.put("created_gte", String.valueOf(System.currentTimeMillis() - 5 * 60 * 1000));
memberParams.put("created_lte", String.valueOf(System.currentTimeMillis()));
Map<String, Object> member = Member.queryList(memberParams, merchantKey);
  • 参数说明

调用参数详见 用户对象列表

企业用户对象

创建企业用户对象

通过本接口您可以创建企业用户,企业用户需要人工审核,审核完成后会发送异步消息通知,若审核成功,则商户用户 member_id 与 Adapay 系统关联成功,若审核失败,则可再次调用本接口提交正确的资料信息。

  • 调用示例

Map<String, Object> memberParams = new  HashMap<String, Object>(2);
memberParams.put("member_id", "jsdk_member\_"+System.currentTimeMillis());
memberParams.put("app_id",app_id);
memberParams.put("order_no","jsdk_order\_"+System.currentTimeMillis());
memberParams.put("social_credit_code_expires", "1111");
memberParams.put("business_scope", "123");
memberParams.put("name", "中国测试有限公司");
memberParams.put("prov_code", "0011");
memberParams.put("area_code", "1100");
memberParams.put("social_credit_code", "201932658452655");
memberParams.put("legal_person", "张测试");
memberParams.put("legal_cert_id", "321485199014234852");
memberParams.put("legal_cert_id_expires", "20220112");
memberParams.put("legal_mp", "13958465215");
memberParams.put("address", "中国上海");
memberParams.put("zip_code", "225485");
memberParams.put("telphone", "41164452");
memberParams.put("email" , "ceshi@qq.com");
memberParams.put("bank_code", "652142");
memberParams.put("bank_acct_type", "1");
memberParams.put("card_no", "622546895642156");
memberParams.put("card_name", "中国测试有限公司");
File file = new File("/demo/test.zip");
Map<String, Object> member = CorpMember.create(memberParams, file, merchantKey);
  • 参数说明

调用参数详见 创建企业用户对象

更新企业用户对象

通过本接口您可以更新企业用户信息,更新企业用户信息需要人工审核,审核完成后会发送异步消息通知,若审核成功,则商户用户信息更新成功,若审核失败,则可再次调用本接口提交正确的资料信息重新发起更新申请。

  • 调用示例

Map<String, Object> memberParams = new  HashMap<String, Object>(2);
memberParams.put("adapay_func_code", "corp_members.update");
memberParams.put("member_id", member_id);
memberParams.put("app_id",app_id);
memberParams.put("order_no","jsdk_order_"+System.currentTimeMillis());
memberParams.put("social_credit_code_expires", "1111");
memberParams.put("business_scope", "123");
memberParams.put("name", "中国测试有限公司");
memberParams.put("prov_code", "0011");
memberParams.put("area_code", "1100");
memberParams.put("legal_person", "张测试");
memberParams.put("legal_cert_id", "321485199014234852");
memberParams.put("legal_cert_id_expires", "20220112");
memberParams.put("legal_mp", "13958465215");
memberParams.put("address", "中国上海");
memberParams.put("zip_code", "225485");
memberParams.put("telphone", "41164452");
memberParams.put("email" , "ceshi@qq.com");
File file = new File("/demo/test.zip");
Map<String, Object> member = AdapayCommon.requestAdapayFile(memberParams, file, merchantKey);
  • 参数说明

调用参数详见 更新企业用户对象

查询企业用户对象

查询已创建的企业用户对象

  • 调用示例

Map<String, Object> memberParams = new  HashMap<String, Object>(2);
memberParams.put("member_id", member_id);
memberParams.put("app_id", app_id);
Map<String, Object> member = CorpMember.query(memberParams, merchantKey);
  • 参数说明

调用参数详见 查询企业用户对象

快捷卡对象

创建快捷绑卡

个人用户使用快捷支付前,对个人用户的银行卡进行验证。该功能实现对用户银行卡进行四要素验证,验证成功后,会向用户银行卡对应的预留手机号发送短信验证码。

  • 调用示例

Map<String, Object> applyParam = new  HashMap<String, Object>();
applyParam.put("app_id", "app_XXXXXXXX");
applyParam.put("member_id", "member_id_test");
applyParam.put("card_id", "666666666666666666666666");
applyParam.put("tel_no", "13888888888");
applyParam.put("vip_code", "321");
applyParam.put("expiration", "0225");
Map<String, Object> result = FastPay.cardApply(applyParam);
  • 参数说明

调用参数详见 创建快捷绑卡申请

创建快捷绑卡确认

快捷绑卡申请成功后,用户输入收到的短信验证码进行短信验证,若验证成功,Adapay会返回快捷卡唯一标识token_no。若同步返回pending状态时,Adapay会发送 异步消息通知 告知。

  • 调用示例

Map<String, Object> confirmParam = new  HashMap<String, Object>();
confirmParam.put("apply_id", "0177857511167541248");
confirmParam.put("sms_code", "123456");
confirmParam.put("notify_url", "https://xxxx.com/xxxx");
Map<String, Object> cash = FastPay.cardConfirm(confirmParam);
  • 参数说明

调用参数详见 创建快捷绑卡确认

查询快捷卡对象列表

查询已绑定的快捷银行卡列表。

  • 调用示例

Map<String, Object> listParam = new  HashMap<String, Object>();
listParam.put("app_id", "app_XXXXXXXX");
listParam.put("member_id", "member_id_test");
listParam.put("token_no", "10000067502");
Map<String, Object> result = FastPay.cardList(listParam);
  • 参数说明

调用参数详见 查询快捷卡对象列表

解绑快捷卡对象

该接口适用针对已经快捷卡绑定成功的商户进行解绑。

  • 调用示例

Map<String, Object> params = new  HashMap<String, Object>();
params.put("adapay_func_code", "fast_card.unBindCard");
params.put("order_no", "unbind_fast_card_10000067502");
params.put("app_id", "app_******");
params.put("member_id", "member_id_test");
params.put("token_no", "10000067502");
params.put("notify_url", "http://adapay.com/notifyUrl");
Map<String, Object> response = AdapayCommon.requestAdapayUits(params);
  • 参数说明

调用参数详见 解绑快捷卡对象

创建快捷支付确认

当 创建支付对象 中 pay_channel 为 fast_pay 时,Adapay 会向用户已绑定快捷卡对应的预留手机号发送短信验证码,需要通过该功能输入用户收到的短信验证码进行验证。 验证结果,Adapay 会发送 异步消息通知 告知。

  • 调用示例

Map<String, Object> confirmParams = new HashMap<String, Object>();
confirmParams.put("payment_id",  "002112020012010545810065165317376983040");
confirmParams.put("sms_code", "123456");
confirmParams.put("app_id", "app_XXXXXXXX");
Map<String, Object> result = FastPay.confirm(confirmParams);
  • 参数说明

调用参数详见 创建快捷支付确认

创建快捷支付短信重发

若用户未收到预留手机号发送短信验证码,可重发短信。

  • 调用示例

Map<String, Object> smsCodeParam = new  HashMap<String, Object>();
smsCodeParam.put("payment_id", "20190912");
Map<String, Object> result = FastPay.smsCode(smsCodeParam);
  • 参数说明

调用参数详见 创建快捷支付短信重发

结算账户对象

创建结算账户对象

商户的 member_id 与 Adapay 系统做关联后,可以创建结算账户,用于用户分账功能,目前只支持绑定银行卡。

  • 调用示例

Map<String, Object> settleCountParams = new  HashMap<String, Object>(2);
Map<String, Object> accountInfo = new  HashMap<String, Object>(2);
accountInfo.put("card_id","6222021703001692221");
accountInfo.put("card_name","袁电茜");
accountInfo.put("cert_id","310109200006062491");
accountInfo.put("cert_type","00");
accountInfo.put("tel_no","18888888881");
accountInfo.put("bank_code","03060000");
accountInfo.put("bank_acct_type","1");
accountInfo.put("card_id","6222021703001692221");
accountInfo.put("prov_code","0031");
accountInfo.put("area_code","3100");
settleCountParams.put("member_id", member_id);
settleCountParams.put("app_id",app_id);
settleCountParams.put("channel","bank_account");
settleCountParams.put("account_info", accountInfo);
Map<String, Object> settleCount = SettleAccount.create(settleCountParams, merchantKey);
  • 参数说明

调用参数详见 创建结算账户对象

查询结算账户对象

查询已绑定的结算账户对象。

  • 调用示例

Map<String, Object> settleCountParams = new  HashMap<String, Object>(2);
settleCountParams.put("settle_account_id", settleCount_id);
settleCountParams.put("member_id", member_id);
settleCountParams.put("app_id",app_id);
Map<String, Object> settleCount = SettleAccount.query(settleCountParams, merchantKey);
  • 参数说明

调用参数详见 查询结算账户对象

查询账户余额

通过本接口查询账户余额

  • 调用示例

Map<String, Object> settleCountParams = new HashMap<String, Object>(2);

settleCountParams.put("member_id", member_id);
settleCountParams.put("app_id", app_id);
settleCountParams.put("settle_account_id", settleCount_id);
Map<String, Object> settleCount = SettleAccount.balance(settleCountParams, merchantKey);
  • 请求参数

调用参数详见 查询账户余额

删除结算账户对象

删除已绑定的结算账户对象。

  • 调用示例

Map<String, Object> settleCountParams = new  HashMap<String, Object>(2);
settleCountParams.put("settle_account_id", settleCount_id);
settleCountParams.put("member_id", member_id);
settleCountParams.put("app_id",app_id);
Map<String, Object> settleCount = SettleAccount.delete(settleCountParams, merchantKey);
  • 参数说明

调用参数详见 删除结算账户对象

修改结算账户对象

修改已经创建的结算账户对象

  • 调用示例

Map<String, Object> settleCountParams = new HashMap<String, Object>(2);
settleCountParams.put("settle_account_id", settleCount_id);
settleCountParams.put("member_id", member_id);
settleCountParams.put("app_id", app_id);

settleCountParams.put("min_amt", "");
settleCountParams.put("remained_amt", "");
System.out.println("修改结算账户,请求参数:" + JSON.toJSONString(settleCountParams));
Map<String, Object> settleCount = SettleAccount.update(settleCountParams, merchantKey);
  • 参数说明

调用参数详见 修改结算账户对象

查询结算明细列表

使用 Adapay 系统生成的结算账户对象 id 查询已创建的结算账户对象信息。

  • 调用示例

Map<String, Object> querySettleDetailParams = new HashMap<String, Object>(2);
querySettleDetailParams.put("app_id", appId);
querySettleDetailParams.put("member_id", memberId);
querySettleDetailParams.put("settle_account_id", settleAccountId);
querySettleDetailParams.put("begin_date", beginDate);
querySettleDetailParams.put("end_date", endDate);
Map<String, Object> settleCount = SettleAccount.detail(querySettleDetailParams, merchantKey);
  • 参数说明

调用参数详见 查询结算明细列表

钱包账户对象

钱包支付

通过该接口,实现对商户钱包支付功能,下单成功返回支付跳转地址

  • 调用示例

Map<String, Object> params = new HashMap<>();
params.put("order_no", System.currentTimeMillis());
params.put("pay_amt", "0.01");
params.put("currency", "cny");
params.put("goods_title", "goods");
params.put("goods_desc", "goodsdesc");
params.put("app_id", "app_f8b14a77-dc24-433b-864f-98a62209d6c4");
params.put("callback_url", "https://www.xxx.com/");

//调用sdk方法,创建支付,得到支付对象
Map<String, Object> payment = new HashMap<>();
try {
    System.out.println("钱包支付交易,请求参数:" + JSON.toJSONString(params));
    payment = Account.payment(params, merchantKey);
} catch (BaseAdaPayException e) {
    e.printStackTrace();
}
  • 请求参数

调用参数详见 钱包支付

取现对象

创建取现对象

通过该接口,实现对指定商户或者商户下用户的结算账户可用余额发起主动提现操作,金额从账户中提到绑定的结算银行卡中。取现结果以异步通知为准。

  • 调用示例

Map<String, Object> settleCountParams = new HashMap<String, Object>(2);

settleCountParams.put("order_no", "jsdk_payment_" + System.currentTimeMillis());
settleCountParams.put("cash_amt", "0.01");
settleCountParams.put("member_id", member_id);
settleCountParams.put("app_id", app_id);
settleCountParams.put("cash_type", "T1");
settleCountParams.put("notify_url", "");
Map<String, Object> settleCount = Drawcash.create(settleCountParams, merchantKey);
  • 请求参数

调用参数详见 钱包取现

取现查询

通过该接口,可以查询已发起的取现交易状态。

  • 调用示例

Map<String, Object> queryCashParam = new  HashMap<String, Object>(2);
queryCashParam.put("order_no", "1579163031383");
Map<String, Object> cash = Drawcash.query(queryCashParam, merchantKey);
  • 请求参数

调用参数详见 取现查询

查询账户余额

通过该接口,查询商户或商户下某个用户结算账户的余额。

  • 调用示例

Map<String, Object> queryParams = new  HashMap<String, Object>(5);
queryParams.put("settle_account_id", settle_account_id);
queryParams.put("member_id", member_id);
queryParams.put("app_id", app_id);
Map<String, Object> settleCount = SettleAccount.balance(queryParams, merchantKey);
  • 请求参数

调用参数详见 查询账户余额

查询可用额度

通过该接口,可以查询可用取现额度

  • 调用示例

Map<String, Object> queryParams = new  HashMap<String, Object>();
queryParams.put("adapay_func_code", "acct.cashQuota");
queryParams.put("cust_id", Adapay商户号);
Map<String, Object> response = AdapayCommon.queryAdapay(queryParams, merchantKey);
  • 请求参数

调用参数详见 查询可用额度

收银台对象

创建收银台对象

通过该接口,实现对商户钱包收银台支付功能,下单成功返回支付跳转地址

  • 调用示例

      Map<String, Object> params = new HashMap<>();
      params.put("order_no", "jdskjdd_200000013");
      params.put("member_id", "user_00013");
      params.put("pay_amt", "0.01");
      params.put("currency", "cny");
      params.put("goods_title", "商品标题");
      params.put("goods_desc", "商品描述");
      params.put("app_id", "app_7d87c043-aae3-4357-9b2c-269349a980d6");
      params.put("callback_url", "https://www.xxxxx.com");

//调用sdk方法,创建支付,得到支付对象
Map<String, Object> checkout = new HashMap<>();
try {
    System.out.println("支付交易,请求参数:" + JSON.toJSONString(params));
    checkout = Checkout.create(params, merchantKey);
} catch (BaseAdaPayException e) {
    e.printStackTrace();
}
  • 请求参数

调用参数详见 钱包收银台支付

查询收银台对象列表

通过该接口,实现对商户钱包收银台对象查询功能,支持使用请求订单号、商户下用户id、以及按时间范围分页查询

  • 调用示例

Map<String, Object> params = new HashMap<>();
params.put("order_no", System.currentTimeMillis());
params.put("pay_amt", "0.01");
params.put("currency", "cny");
params.put("goods_title", "goods");
params.put("goods_desc", "goodsdesc");
params.put("app_id", "app_f8b14a77-dc24-433b-864f-98a62209d6c4");
params.put("callback_url", "https://www.xxx.com/");

//调用sdk方法,得到收银台对象列表
Map<String, Object> checkout = new HashMap<>();
try {
    System.out.println("查询收银台对象,请求参数:" + JSON.toJSONString(params));
    checkout = Checkout.queryList(params, merchantKey);
} catch (BaseAdaPayException e) {
    e.printStackTrace();
}
  • 请求参数

调用参数详见 钱包收银台对象列表查询

账户冻结

创建账户冻结对象

通过该接口,实现对商户或者商户下用户的结算账户可用余额进行冻结操作。

  • 调用示例

Map<String, Object> freezeParam = new  HashMap<String, Object>(4);
freezeParam.put("order_no", "1579163031383");
freezeParam.put("app_id", "app_XXXXXXXX");
freezeParam.put("trans_amt", "0.01");
freezeParam.put("member_id", "member_id_test");
Map<String, Object> freeze = SettleAccount.freeze(freezeParam);
  • 请求参数

调用参数详见 账户冻结对象

查询账户冻结对象列表

通过该接口,查询已发起的账户解冻交易,支持使用原解冻交易的请求订单号,以及时间范围查询。

  • 调用示例

Map<String, Object> params = new HashMap<>();
params.put("app_id", "app_XXXXXXXX");
params.put("status", "succeeded");
params.put("page_index", "1");
params.put("page_size", "10");
params.put("created_gte", "1571466657929");
params.put("created_lte", "1571898657929");
Map<String, Object> result = SettleAccount.freezeList(params);
  • 请求参数

调用参数详见 查询账户冻结对象列表

账户解冻

创建账户解冻对象

通过该接口,实现对已冻结的交易进行全额解冻操作。

  • 调用示例

Map<String, Object> unfreezeParam = new  HashMap<String, Object>(4);
unfreezeParam.put("order_no", "1579163031383");
unfreezeParam.put("app_id", "app_XXXXXXXX");
unfreezeParam.put("account_freeze_id", "002112020111717230410174704123849117696");
Map<String, Object> unfreeze = SettleAccount.unfreeze(unfreezeParam);
  • 请求参数

调用参数详见 创建账户解冻对象

查询账户解冻对象列表

通过该接口,查询已发起的账户解冻交易,支持使用原解冻交易的请求订单号,以及时间范围查询。

  • 调用示例

Map<String, Object> params = new HashMap<>();
params.put("app_id", "app_XXXXXXXX");
params.put("status", "succeeded");
params.put("page_index", "1");
params.put("page_size", "10");
params.put("created_gte", "1571466657929");
params.put("created_lte", "1571898657929");
Map<String, Object> result = SettleAccount.unfreezeList(params);
  • 请求参数

调用参数详见 查询账户解冻对象列表

钱包

钱包登录

通过该接口,实现对商户登录钱包功能,登录成功返回跳转地址

  • 调用示例

Map<String, Object> queryParams = new HashMap<String, Object>(5);
queryParams.put("ip", "127.0.0.1");
queryParams.put("member_id", "0");
queryParams.put("app_id", appId);
Map<String, Object> wallet = Wallet.login(queryParams, merchantKey);
if (wallet != null && "succeeded".equals(wallet.get("status"))) {
    String formString = wallet.get("redirect_url").toString();
    System.out.println("跳转地址:" + formString);
}
  • 请求参数

调用参数详见 钱包登录

工具类

下载对账单

您可通过本接口下载您交易日期的对账单。比如掉单、系统错误等导致商户侧和 Adapay 侧数据不一致,通过对账单核对后可校正支付状态。

  • 调用示例

Map<String, Object> downloadParam = new  HashMap<String, Object>(2);
downloadParam.put("bill_date", "20190912");
Map<String, Object> download = AdapayTools.downloadBill(downloadParam, merchantKey);
  • 请求参数

参数

类型

描述

bill_date

String(8)

对账单的日期,格式:20180808

  • 返回参数

参数

类型

描述

bill_download_url

String(8)

对账单文件下载 url

获取云闪付用户标识

通过本接口获取银联云闪付用户标识

  • 调用示例

Map<String, Object> unionParam = new  HashMap<String, Object>(2);
unionParam.put("order_no", "jsdk_payment_" + System.currentTimeMillis());
unionParam.put("app_id", appId);
unionParam.put("user_auth_code", "5yRGbi+IRda5khIQoQf1Hw==");
unionParam.put("app_up_identifier", "CloudPay");
Map<String, Object> result = AdapayTools.unionUserId(unionParam, merchantKey);
  • 请求参数

调用参数详见 获取银联云闪付用户标识

验签方法

通过此方法,商户可对 HTTP 回调参数进行签名验证。

返回示例详见 http response

  • 调用示例

// data 返回内容,sign返回签名,publicKey adapay 公钥默认为下面的值,无需修改
//支付失败订单案例
String sign = "o\\/kN9b3zBKJLCuPJ9Et87YJ0Civ0aYgX\\/aJkMgH83BQhfELWukot7DSMYRy\\/VwtXkwI\\/nMSqc9vkPysO9HMCeiWezx+MAzHyEd7avcd7VyPjEoYehy\\/E8fCKavG0N2pOGtQLq1Jd3qVHnEGUlCX2+H2u5KItrQeXYaW4OtzD6F0=";
String content = "{\"app_id\":\"app_143bc8f5-5e4a-4bf9-b8c8-6ececdb8ecd2\",\"created_time\":\"20201106134831\",\"error_code\":\"channel_response_code_fail\",\"error_msg\":\"失败\",\"id\":\"002112020110613483010170663859078807552\",\"order_no\":\"SDR0000040224\",\"out_trans_id\":\"\",\"pay_amt\":\"0.14\",\"pay_channel\":\"b2c\",\"status\":\"failed\"}";
String pubkey = AdapayCore.PUBLIC_KEY;
// AdapaySign.verifySign(content,sign,pubkey);
// System.out.println("支付失败结果:"+AdapaySign.verifySign(content,sign,pubkey));

//支付成功订单案例
String sign1 = "COqP7peS7OYFvcImcCeNOFofCoh66EE4F5Jp0XTakKoz+ltUQyOteStX0y+T8xig6wEVqRRe7Lig3ahoHWzjt1sqs7soDiWMxss5dK8MVNmDemC0q6Zhv4C6+4awDdcVH+CO7gBAUGjKMrJXnc3Dt0iPo5TT6m90HlkCP3a+XEs=";
String content1 = "{\"app_id\":\"app_143bc8f5-5e4a-4bf9-b8c8-6ececdb8ecd2\",\"created_time\":\"20201106135156\",\"id\":\"002112020110613515510170664719455526912\",\"order_no\":\"SDR0000040226\",\"pay_amt\":\"0.13\",\"pay_channel\":\"b2c\",\"status\":\"succeeded\"}";
AdapaySign.verifySign(content1,sign1,pubkey);
System.out.println("支付成功结果:"+AdapaySign.verifySign(content1,sign1,pubkey));

httpclient超时设置

通过此方法,商户可设置 httpclient 的超时参数

  • 调用示例

Map<String, Object> paymentParams = new HashMap<String, Object>(10);
paymentParams.put("app_id", "your appid");
paymentParams.put("order_no", "jsdk_payment"+System.currentTimeMillis());
paymentParams.put("pay_channel", PayChannelEnum.ALIPAY_QR.getCode());
paymentParams.put("pay_amt", "0.01");
paymentParams.put("goods_title", "your goods title");
paymentParams.put("goods_desc", "your goods desc");
paymentParams.put("div_members", "");
// 设置超时时间 单位毫秒 类型 int 超出后会抛出 BaseAdaPayException HTTP_TIMEOUT_EXCEPTION
// adapay_connection_request_timeout 类型 int, 单位:毫秒 ms
// 非必须, 默认 10000 指从连接池获取连接的 timeout
paymentParams.put("adapay_connection_request_timeout", 1500);
// adapay_connect_timeout 单位:毫秒 ms
// 非必须, 默认 30000 指客户端和服务器建立连接的timeout
paymentParams.put("adapay_connect_timeout", 1500);
// adapay_socket_timeout 单位:毫秒 ms
// 非必须, 默认 30000 指客户端从服务器读取数据的timeout,
paymentParams.put("adapay_socket_timeout", 1500);

Map<String, Object> payment = Payment.create(paymentParams, merchantKey);
System.out.println("payment result="+JSON.toJSONString(payment));