开发接入

调用流程

业务规则
余额查询
账户余额查询
调用流程
关键入参
参数 | 类型 | 最大长度 | 是否必填 | 参数说明 |
---|---|---|---|---|
alipay_user_id | String | 18 | 必选 | 蚂蚁统一会员 ID。必须等于请求发起方的 PID,可通过 会员信息产品 获取。示例值:208818457777488333 |
account_type | String | 30 | 必选 | 查询的账号类型,固定值为 ACCTRANS_ACCOUNT。 |
关键出参
参数 | 具体类型 | 最大长度 | 是否必填 | 参数说明 |
---|---|---|---|---|
available_amount | String | 15 | 必选 | 账户可用余额,单位元,精确到小数点后两位。示例值:26.45 |
SDK 调用
请求示例
package com.java.sdk.demo;
import com.alipay.v3.ApiException;
import com.alipay.v3.ApiClient;
import com.alipay.v3.util.model.AlipayConfig;
import com.alipay.v3.Configuration;
import com.alipay.v3.api.AlipayFundAccountApi;
import com.alipay.v3.model.*;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class AlipayFundAccountApiQuery {
public static void main(String[] args) throws ApiException {
ApiClient defaultClient = Configuration.getDefaultApiClient();
// 初始化alipay参数(全局设置一次)
AlipayConfig alipayConfig = new AlipayConfig();
alipayConfig.setServerUrl("https://openapi.alipay.com");
alipayConfig.setAppId("<-- 请填写您的AppId,例如:2019091767145019 -->");
alipayConfig.setPrivateKey("<-- 请填写您的应用私钥,例如:MIIEvQIBADANB ... ... -->");
alipayConfig.setAlipayPublicKey("<-- 请填写您的支付宝公钥,例如:MIIBIjANBg... -->");
defaultClient.setAlipayConfig(alipayConfig);
AlipayFundAccountApi api = new AlipayFundAccountApi();
String merchantUserId = null;
String alipayUserId = "2088301409188095";
String alipayOpenId = null;
String accountProductCode = null;
String accountType = "ACCTRANS_ACCOUNT";
String accountSceneCode = null;
String extInfo = null;
try {
AlipayFundAccountQueryResponseModel response = api.query(merchantUserId, alipayUserId, alipayOpenId, accountProductCode, accountType, accountSceneCode, extInfo);
} catch (ApiException e) {
AlipayFundAccountQueryDefaultResponse errorObject = (AlipayFundAccountQueryDefaultResponse) e.getErrorObject();
System.out.println("调用失败:" + errorObject);
}
}
}
响应示例
{
"freeze_amount":"11.11",
"available_amount":"26.45"
}
转账和通知
单笔转账到支付宝账户
调用流程
接入说明
关键入参
参数 | 类型 | 最大长度 | 是否必填 | 参数说明 |
---|---|---|---|---|
out_biz_no | String | 64 | 必选 | 商家侧唯一订单号,由商家自定义。对于不同转账请求,商家需保证该订单号在自身系统唯一。示例值:20190619000000001 |
trans_amount | String | 16 | 必选 | 订单总金额,单位为元,不支持千位分隔符,精确到小数点后两位,取值范围[0.1,100000000]。**注意:**最小可 传金额 0.1 元,最大可传金额 100000000 元,如超过最小或最大金额限制,可能会导致金额超限等接口报错。示例值:1.68 |
product_code | String | 64 | 必选 | 销售产品码。单笔无密转账固定为 TRANS_ACCOUNT_NO_PWD。 |
biz_scene | String | 64 | 必选 | 业务场景。单笔无密转账固定为 DIRECT_TRANSFER。 |
payee_info | Participant | 必选 | 收款方信息。 | |
└ identity_type | String | 64 | 必选 | 收款方的标识类型,目前支持如下枚举:ALIPAY_USER_ID:支付宝会员的用户 ID,可通过 获取会员信息 能力获取。 ALIPAY_LOGON_ID:支付宝登录号,支持邮箱和手机号格式。 |
└ identity | String | 64 | 必选 | 收款方的标识 ID。当 identity_type=ALIPAY_USER_ID 时,填写支付宝用户 UID。**示例值:**2088123412341234。当 identity_type=ALIPAY_LOGON_ID 时,填写支付宝登录号。**示例值:**186xxxxxxxx。 |
└ name | String | 256 | 可选 | 收款方真实姓名。如果非空,将校验收款支付宝账号姓名一致性。当 identity_type=ALIPAY_LOGON_ID 时,本字段必填。若传入该属性,则在支付宝回单中将会显示这个属性。 |
order_title | String | 64 | 必选 | 转账业务的标题,用于在支付宝用户的账单里显示。示例值:201905代发 |
remark | String | 200 | 可选 | 业务备注。示例值:201905代发 |
business_params | String | 2048 | 可选 | 转账业务请求的扩展参数,支持传入的扩展参数如下:payer_show_name_use_alias:是否展示付款方别名,可选,收款方在支付宝账单中可见。枚举支持:true:展示别名,将展示商家支付宝在商家平台 商户信息 > 商户基本信息 页面配置的 商户别名。false:不展示别名。默认为 false。示例值:{"payer_show_name_use_alias":"true"} |
关键出参
名称 | 类型 | 最大长度 | 必填 | 描述 |
---|---|---|---|---|
out_biz_no | String | 64 | 必选 | 商户订单号。示例值:20190619000000001 |
order_id | String | 64 | 必选 | 支付宝转账订单号。示例值:20190619110070000006800000025890 |
pay_fund_order_id | String | 64 | 必选 | 支付宝支付资金流水号。示例值:20190801110070001506380000251556 |
status | String | 32 | 可选 | 转账单据状态。示例值:SUCCESS,代表该 笔转账交易成功 |
trans_date | String | 32 | 可选 | 订单支付时间,格式为yyyy-MM-dd HH:mm:ss。示例值:2019-08-21 00:00:00 |
SDK 调用
请求示例
package com.java.sdk.demo;
import com.alipay.v3.ApiException;
import com.alipay.v3.ApiClient;
import com.alipay.v3.util.model.AlipayConfig;
import com.alipay.v3.Configuration;
import com.alipay.v3.api.AlipayFundTransUniApi;
import com.alipay.v3.model.*;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class AlipayFundTransUniApiTransfer {
public static void main(String[] args) throws ApiException {
ApiClient defaultClient = Configuration.getDefaultApiClient();
// 初始化alipay参数(全局设置一次)
AlipayConfig alipayConfig = new AlipayConfig();
alipayConfig.setServerUrl("https://openapi.alipay.com");
alipayConfig.setAppId("<-- 请填写您的AppId,例如:2019091767145019 -->");
alipayConfig.setAppCertPath("<-- 请填写您的应用公钥证书文件路径,例如:/foo/appCertPublicKey_2019051064521003.crt -->");
alipayConfig.setAlipayPublicCertPath("<-- 请填写您的支付宝公钥证书文件路径,例如:/foo/alipayCertPublicKey_RSA2.crt -->");
alipayConfig.setRootCertPath("<-- 请填写您的支付宝根证书文件路径,例如:/foo/alipayRootCert.crt -->");
defaultClient.setAlipayConfig(alipayConfig);
AlipayFundTransUniApi api = new AlipayFundTransUniApi();
AlipayFundTransUniTransferModel data = new AlipayFundTransUniTransferModel();
data.setOutBizNo("201806300001");
data.setRemark("201905代发");
data.setBusinessParams("{\"payer_show_name_use_alias\":\"true\"}");
data.setBizScene("DIRECT_TRANSFER");
Participant payeeInfo = new Participant();
payeeInfo.setIdentity("2088123412341234");
payeeInfo.setIdentityType("ALIPAY_USER_ID");
payeeInfo.setName("黄龙国际有限公司");
data.setPayeeInfo(payeeInfo);
data.setTransAmount("23.00");
data.setProductCode("TRANS_ACCOUNT_NO_PWD");
data.setOrderTitle("201905代发");
try {
AlipayFundTransUniTransferResponseModel response = api.transfer(data);
} catch (ApiException e) {
AlipayFundTransUniTransferDefaultResponse errorObject = (AlipayFundTransUniTransferDefaultResponse) e.getErrorObject();
System.out.println("调用失败:" + errorObject);
}
}
}
响应示例
{
"trans_date":"2019-08-21 00:00:00",
"pay_fund_order_id":"20190801110070001506380000251556",
"out_biz_no":"201808080001",
"order_id":"20190801110070000006380000250621",
"status":"SUCCESS"
}
蚂蚁消息:转账单据状态变更通知
调用流程
接入说明
通知触发条件
触发条件名 | 触发条件描述 | 触发条件默认值 |
---|---|---|
status=SUCCESS | 转账成功 | true(触 发通知) |
/ | 转账失败 | false(不触发通知) |
消息示例
ISV_GATEWAY_URL?charset=GBK&biz_content =
{
"pay_fund_order_id" : "20190801110070001506380000251556" , "out_biz_no" : "201806300001" , "product_code" : "TRANS_ACCOUNT_NO_PWD" , "biz_scene" : "PERSONAL_PAY" , "origin_interface" : "alipay.fund.trans.app.pay" , "order_id" : "20190624110075000006530000014566" , "status" : "SUCCESS" , "action_type" : "FINISH" , "trans_amount" : "32.00" , "pay_date" : "2013-01-01 08:08:08"
}
& msg_method = alipay . fund . trans . order . changed & utc_timestamp = 1516797622752 & version = 1.1 & sign_type = RSA2 & notify_id = d275fec564e62af6bedbcee73f3f05fi5x & app_id = 2013121700999429 & sign = I + Y / lvqYUEEc10EPdpntRhFIQ ==
参数说明
参数 | 类型 | 最大长度 | 是否必填 | 描述 |
---|---|---|---|---|
out_biz_no | String | 64 | 必选 | 商户端的唯一订单号。示例值:201806300001 |
product_code | String | 32 | 必选 | 销售产品码,商家和支付宝签约的产品码。单笔无密转账固定为 TRANS_ACCOUNT_NO_PWD。 |
biz_scene | String | 32 | 必选 | 描述特定的业务场景。示例值:DIRECT_TRANSFER |
origin_interface | String | 64 | 必选 | 请求来源的接口。示例值:alipay.fund.trans.uni.transfer |
pay_fund_order_id | String | 64 | 可选 | 支付宝支付资金流水号。示例值:20190801110070001506380000251556 |
order_id | String | 64 | 必选 | 支付宝转账单据号。示例值:20190624110075000006530000014566 |
status | String | 16 | 必选 | 转账单据状态。可能出现的状态如下:SUCCESS:转账成功; |
action_type | String | 32 | 必选 | 资金订单的操作类型,取值如下:FINISH- 订单处理已完结。 |
trans_amount | String | 20 | 必选 | 转账金额。示例值:32.00 |
pay_date | String | 20 | 可选 | 支付完成时间。示例值:2013-01-01 08:08:08 |
响应值
响应值 | 描述 | 是否重试 |
---|---|---|
fail | 消息获取失败 | 重试 |
success | 消息获取成功 | 不重试 |
消息验签
AlipaySignature.rsaCertCheckV1
方法,可以使用该方法对通知报文验签。// 回调的待验签字符串
String resultInfo = "buyer_id=208****42&total_amount=0.01&body=***试&trade_no=20190329**941025940236¬ify_time=2019-03-29 19:42:04&subject=**电脑网站支付&sign_type=RSA2&charset=UTF-8&auth_app_id=201****222¬ify_type=trade_status_sync&invoice_amount=0.01&out_trade_no=20190329ygyg45484544100003&trade_status=TRADE_SUCCESS&gmt_payment=2019-03-29 19:42:03&version=1.0&point_amount=0.00&sign=your_sign&gmt_create=2019-03-29 19:42:00&buyer_pay_amount=0.01&receipt_amount=0.01&fund_bill_list=[{\"amount\":\"0.01\",\"fundChannel\":\"PCREDIT\"}]&seller_id=208****5&app_id=2014100***22¬ify_id=20190329002221942040**8";
// 验签支付宝公钥证书路径
String alipayPublicCertPath = "your_alipayPublicCertPath";
// 验签字符集
String charset = "utf-8";
// 对待签名字符串数据通过&进行拆分
String[] temp = resultInfo.split("&");
LinkedHashMap<String, String> params = new LinkedHashMap<String, String>();
// 把拆分数据放在 Map 集合内
for (int i = 0; i < temp.length; i++) {
String[] arr = temp[i].split("=", 2); //通过"="号分割成2个数据
String[] tempAagin = new String[arr.length]; //再开辟一个数组用来接收分割后的数据
for (int j = 0; j < arr.length; j++) {
tempAagin[j] = arr[j];
}
map.put(tempAagin[0], tempAagin[1]);
}
System.out.println(map);
// 验签方法
/**
* @param params 参数列表(包括待验签参数和签名值sign) key-参数名称 value-参数值
* @param alipayPublicCertPath 验签支付宝公钥证书路径
* @param charset 验签字符集
**/
boolean signVerified = AlipaySignature.rsaCertCheckV1(params, alipayPublicCertPath, charset);
if (signVerified) {
// TODO 验签成功后
System.out.println("success");
} else {
System.out.println("fail");
}
转账单据查询
调用流程

接入说明
pay_fund_order_id
> order_id
> out_biz_no
,高优先级与低优先级参数同时给出时,用高优先级参数查询,忽略低优先级参数。关键入参
参数 | 类型 | 最大长度 | 必填 | 参数说明 |
---|---|---|---|---|
order_id | String | 64 | 特殊必填 | 支付宝转账单据号。本参数和商户转账唯一订单号、支付宝支付资金流水号三者不能同时为空。 当本参数和商户转账唯一订单号、支付宝支付资金流水号三者同时提供时,将用支付宝支付资金流水号进行查询,忽略其余两者。 当本参数和支付宝支付资金流水号同时提供时,将用支付宝支付资金流水号进行查询,忽略本参数。 当本参数和商户转账唯一订单号同时提供时,将用本参数进行查询,忽略商户转账唯一订单号。 示例值:20190619110070000006800000025890 |
pay_fund_order_id | String | 64 | 特殊必填 | 支付宝支付资金流水号。本参数和支付宝转账单据号、商户转账唯一订单号三者不能同时为空。 当本参数和支付宝转账单据号、商户转账唯一订单号同时提供时,将用本参数进行查询,忽 略本参数。 当本参数和支付宝转账单据号同时提供时,将用本参数进行查询,忽略支付宝转账单据号。 当本参数和商户转账唯一订单号同时提供时,将用本参数进行查询,忽略商户转账唯一订单号。 示例值:20190801110070001506380000251556 |
out_biz_no | String | 64 | 特殊必填 | 商户转账唯一订单号:发起转账来源方定义的转账单据 ID。本参数和支付宝转账单据号、支付宝支付资金流水号三者不能同时为空。 当本参数和支付宝转账单据号、支付宝支付资金流水号同时提供时,将用支付宝支付资金流水号进行查询,忽略本参数。 当本参数和支付宝转账单据号同时提供时,将用支付宝转账单据号进行查询,忽略本参数。 示例值:20190619000000001 |
product_code | String | 64 | 特殊必填 | 销售产品码,如果传了 out_biz_no,则该字段必传。单笔无密转账固定为TRANS_ACCOUNT_NO_PWD。 |
biz_scene | String | 64 | 特殊必填 | 描述特定的业务场景,如果传递了out_biz_no 则该字段为必传。单笔无密转账固定为DIRECT_TRANSFER。 |
关键出参
名称 | 类型 | 最大长度 | 是否必填 | 参数说明 |
---|---|---|---|---|
order_id | String | 64 | 必选 | 支付宝转 账单据号。示例值:20190703110075000006530004756875 |
pay_fund_order_id | String | 64 | 可选 | 支付宝支付资金流水号。转账失败不返回。示例值:20190801110070001506380000251556 |
out_biz_no | String | 64 | 必选 | 商户转账唯一订单号。使用 out_biz_no 查询时,必须传 product_code 和 biz_scene。示例值:20190619000000001 |
pay_date | String | 可选 | 支付时间,格式为yyyy-MM-dd HH:mm:ss,转账失败不返回。示例值:2013-01-01 08:08:08 | |
status | String | 64 | 必选 | 转账单据状态。示例值:SUCCESS |
SDK 调用
请求示例
package com.java.sdk.demo;
import com.alipay.v3.ApiException;
import com.alipay.v3.ApiClient;
import com.alipay.v3.util.model.AlipayConfig;
import com.alipay.v3.Configuration;
import com.alipay.v3.api.AlipayFundTransCommonApi;
import com.alipay.v3.model.*;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class AlipayFundTransCommonApiQuery {
public static void main(String[] args) throws ApiException {
ApiClient defaultClient = Configuration.getDefaultApiClient();
// 初始化alipay参数(全局设置一次)
AlipayConfig alipayConfig = new AlipayConfig();
alipayConfig.setServerUrl("https://openapi.alipay.com");
alipayConfig.setAppId("<-- 请填写您的AppId,例如:2019091767145019 -->");
alipayConfig.setPrivateKey("<-- 请填写您的应用私钥,例如:MIIEvQIBADANB ... ... -->");
alipayConfig.setAlipayPublicKey("<-- 请填写您的支付宝公钥,例如:MIIBIjANBg... -->");
defaultClient.setAlipayConfig(alipayConfig);
AlipayFundTransCommonApi api = new AlipayFundTransCommonApi();
String productCode = "STD_RED_PACKET";
String bizScene = "PERSONAL_PAY";
String outBizNo = "201808080001";
String orderId = "20190801110070000006380000250621";
String payFundOrderId = "20190801110070001506380000251556";
try {
AlipayFundTransCommonQueryResponseModel response = api.query(productCode, bizScene, outBizNo, orderId, payFundOrderId);
} catch (ApiException e) {
AlipayFundTransCommonQueryDefaultResponse errorObject = (AlipayFundTransCommonQueryDefaultResponse) e.getErrorObject();
System.out.println("调用失败:" + errorObject);
}
}
}
响应示例
{
"pay_date":"2013-01-01 08:08:08",
"sub_order_error_code":"MID_ACCOUNT_CARD_INFO_ERROR",
"sub_order_status":"FAIL",
"pay_fund_order_id":"20190801110070001506380000251556",
"out_biz_no":"201808080001",
"trans_amount":"付款金额,单位为元,精确到小数点后两位:32.00",
"settle_serial_no":"2023052993044491260542090100400",
"sub_order_fail_reason":"收款方银行卡信息有误",
"arrival_time_end":"2013-01-01 08:08:08",
"order_fee":"0.02",
"error_code":"PAYEE_CARD_INFO_ERROR",
"fail_reason":"收款方银行卡信息有误",
"order_id":"20190801110070000006380000250621",
"status":"SUCCESS"
}