APP 支付快速接入
整体交互流程图

重要说明
1.
2.
3.
4.
5.
6.
7.
8.
9.
注意:fund_change 只表示本次接口请求是否资金变动,不是指该笔交易是否资金变动。如果第一次退款成功,返回 Y,但是相同参数(如 out_request_no 不变)第二次请求则会返回 N,因此当 fund_change=N 时,建议通过退款查询接口进一步判断。
交易状态流程

1.
2.
3.
4.
5.
6.
支付流程
服务端接入
服务端获取 orderStr
请求示例
方式一:使用支付宝SDK (推荐)
alipayClient.sdkExecute(request);
方法发起请求,获取 orderStr。alipay_sdk=alipay-sdk-java-dynamicVersionNo&app_id=2014100900010000&biz_content=%7B%22total_amount%22%3A%220.01%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22subject%22%3A%22%E5%93%88%E5%93%88%E5%93%88%E5%93%88%E5%93%88%E5%A4%A7%E4%B9%90%E9%80%8F%22%2C%22out_trade_no%22%3A%2220220530000000011111101%22%7D&charset=utf-8&format=json&method=alipay.trade.app.pay&sign=iuO%2FTso2zr236p%2F%2FgyVoM9B7JGhyQqHHlL82siLLPI90xUruDVRt8hIOAroNid%2FTCbYUENSV4FkIZ5krrXm1qDFLHUnvtsUA3kToEojxyKilR8czZFYm6w91oxJseFZQJe0Os6IJg8oG29tYRf9TiXjB0leSwGQ3Ax8VilW2ATsne9L4A9Xah5fz7PTlKURTMYFqU166J2RH769wtTOjOb5Gs74aSdB3ymlZ486%2FGAcFwyXSvd3i8FEzsx3obLaM3oRQGQ%2Fx2jn8aL5qH3nVkGFIKA4xAUOZAaZSrj4EFw17HPFBYvcPwG55DQlmyLluh5lb4Ibi3j1ZxR4NiB0YFQ%3D%3D&sign_type=RSA2×tamp=2022-05-30+17%3A43%3A28&version=1.0
方式二:自行构建请求 (不推荐)
1.
app_id=2015052600090779&biz_content={"timeout_express":"30m","product_code":"QUICK_MSECURITY_PAY","total_amount":"0.01","subject":"1","body":"我是测试数据","out_trade_no":"IQJZSRC1YMQB5HU"}&charset=utf-8&format=json&method=alipay.trade.app.pay¬ify_url=http://domain.merchant.com/payment_notify&sign_type=RSA2×tamp=2016-08-25 20:26:31&version=1.0
1.
app_id=2015052600090779&biz_content={"timeout_express":"30m","product_code":"QUICK_MSECURITY_PAY","total_amount":"0.01","subject":"1","body":"我是测试数据","out_trade_no":"IQJZSRC1YMQB5HU"}&charset=utf-8&format=json&method=alipay.trade.app.pay¬ify_url=http://domain.merchant.com/payment_notify&sign_type=RSA2×tamp=2016-08-25 20:26:31&version=1.0&sign=cYmuUnKi5QdBsoZEAbMXVMmRWjsuUj+y48A2DvWAVVBuYkiBj13CFDHu2vZQvmOfkjE0YqCUQE04kqm9Xg3tIX8tPeIGIFtsIyp/M45w1ZsDOiduBbduGfRo1XRsvAyVAv2hCrBLLrDI5Vi7uZZ77Lo5J0PpUUWwyQGt0M4cj8g=
1.
app_id=2015052600090779&biz_content=%7B%22timeout_express%22%3A%2230m%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A%220.01%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22out_trade_no%22%3A%22IQJZSRC1YMQB5HU%22%7D&charset=utf-8&format=json&method=alipay.trade.app.pay¬ify_url=http%3A%2F%2Fdomain.merchant.com%2Fpayment_notify&sign_type=RSA2×tamp=2016-08-25%2020%3A26%3A31&version=1.0&sign=cYmuUnKi5QdBsoZEAbMXVMmRWjsuUj%2By48A2DvWAVVBuYkiBj13CFDHu2vZQvmOfkjE0YqCUQE04kqm9Xg3tIX8tPeIGIFtsIyp%2FM45w1ZsDOiduBbduGfRo1XRsvAyVAv2hCrBLLrDI5Vi7uZZ77Lo5J0PpUUWwyQGt0M4cj8g%3D
客户端接入
商家 APP
客户端 iOS 集成流程
客户端 Android 集成流程
客户端鸿蒙 SDK 集成流程
支付 宝小程序
// .js
my.tradePay({
// 调用接口返回的orderStr
orderStr: 'alipay_sdk=alipay-sdk-java-dynamicVersionNo&app_id=2014100900010000&biz_content=%7B%22total_amount%22%3A%220.01%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22subject%22%3A%22%E5%93%88%E5%93%88%E5%93%88%E5%93%88%E5%93%88%E5%A4%A7%E4%B9%90%E9%80%8F%22%2C%22out_trade_no%22%3A%2220220530000000011111101%22%7D&charset=utf-8&format=json&method=alipay.trade.app.pay&sign=iuO%2FTso2zr236p%2F%2FgyVoM9B7JGhyQqHHlL82siLLPI90xUruDVRt8hIOAroNid%2FTCbYUENSV4FkIZ5krrXm1qDFLHUnvtsUA3kToEojxyKilR8czZFYm6w91oxJseFZQJe0Os6IJg8oG29tYRf9TiXjB0leSwGQ3Ax8VilW2ATsne9L4A9Xah5fz7PTlKURTMYFqU166J2RH769wtTOjOb5Gs74aSdB3ymlZ486%2FGAcFwyXSvd3i8FEzsx3obLaM3oRQGQ%2Fx2jn8aL5qH3nVkGFIKA4xAUOZAaZSrj4EFw17HPFBYvcPwG55DQlmyLluh5lb4Ibi3j1ZxR4NiB0YFQ%3D%3D&sign_type=RSA2×tamp=2022-05-30+17%3A43%3A28&version=1.0',
success: (res) => {
my.alert({
content: JSON.stringify(res),
});
},
fail: (res) => {
my.alert({
content: JSON.stringify(res),
});
}
});
异步通知
支付结果查询
重要入参说明
参数名 | 参数说明 |
---|---|
out_trade_no | 支付时传入的商户订单号,与 trade_no 必填一个。 |
trade_no | 支付时返回的支付宝交易号,与 out_trade_no 必填一个。 |
退款流程
out_trade_no
(商家网站唯一订单号)或trade_no
(支付宝交易号),将对应订单支付款退还给买家。支付宝将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家账号上。接口流程

退款结果
fund_change
参数来判断,返回值为 Y
则表示退款成功。out_request_no
需保持一致。out_request_no
需保持一致。退款说明
out_request_no
幂等返回,因此同一笔交易需要多次部分退款时,必须使用不同的 out_request_no
。重要入参说明
参数名 | 参数说明 |
---|---|
out_trade_no | 支付时传入的商户订单号,与 trade_no 必填一个。 |
trade_no | 支付时返回的支付宝交易号,与 out_trade_no 必填一个。 |
out_request_no | 本次退款请求流水号,部分退款时必传。 |
refund_amount | 本次退款金额。 |
重要出参说明
参数名 | 参数说明 |
---|---|
refund_fee | 该笔交易已退款的总金额。 |
退款到银行卡通知

重要参数说明
参数名 | 参数说明 |
---|---|
trade_no | 支付宝交易订单号。 |
dback_status | 银行卡冲退状态。S - 成功F - 失败,银行卡冲退失败,资金自动转入用户支付宝余额。 |
dback_amount | 银行卡冲退金额。 |
bank_ack_time | 银行响应时间,格式为 yyyy-MM-dd HH:mm:ss。 |
est_bank_receipt_time | 预估银行入账时间,格式为 yyyy-MM-dd HH:mm:ss。 |
查询退款结果
1.
2.
重要入参说明
参数名 | 参数说明 |
---|---|
out_trade_no | 支付时传入的商户订单号,与 trade_no 必填一个。 |
trade_no | 支付时返回的支付宝交易号,与 out_trade_no 必填一个。 |
对账流程
接口流程

1.
2.
重要入参说明
参数名 | 参数说明 |
---|---|
bill_type | 固定传入 trade。 |
bill_date | 需要下载的账单日期,最晚是当期日期的前一天。 |
下载账单文件示例代码
//将接口返回的对账单下载地址传入urlStr
String urlStr = "http://dwbillcenter.alipay.com/downloadBillFile.resource?bizType=X&userId=X&fileType=X&bizDates=X&downloadFileName=X&fileId=X";
//指定希望保存的文件路径
String filePath = "/Users/fund_bill_20160405.csv.zip";
URL url = null;
HttpURLConnection httpUrlConnection = null;
InputStream fis = null;
FileOutputStream fos = null;
try {
url = new URL(urlStr);
httpUrlConnection = (HttpURLConnection) url.openConnection();
httpUrlConnection.setConnectTimeout(5 * 1000);
httpUrlConnection.setDoInput(true);
httpUrlConnection.setDoOutput(true);
httpUrlConnection.setUseCaches(false);
httpUrlConnection.setRequestMethod("GET");
httpUrlConnection.setRequestProperty("CHARSET", "UTF-8");
httpUrlConnection.connect();
fis = httpUrlConnection.getInputStream();
byte[] temp = new byte[1024];
int b;
fos = new FileOutputStream(new File(filePath));
while ((b = fis.read(temp)) != -1) {
fos.write(temp, 0, b);
fos.flush();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(fis!=null) fis.close();
if(fos!=null) fos.close();
if(httpUrlConnection!=null) httpUrlConnection.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
附录:自定义参数说明
1.
2.
1.
app_id=2014072300007148**&version=1.0&biz_content
的 key 是公共请求参数,商家/服务商自己的扩展参数需要放在 biz_content 内部,例如示例中 tips 属性,很显然下面 total_amount 属性是商家按照自己的业务属性赋值的,但是由于 total_amount 同时也是支付宝关键 key ,支付宝将会认为这个 total_amount 是支付宝业务的参数应该是金额,这个最终将导致误解析。2.
app_id=2014072300007148&charset=UTF-8&version=1.0×tamp=2016-07-01 08:08:08&method=alipay.trade.app.pay¬ify_url=https://api.**.com/pay_receive_notify.html&sign_type=RSA2&sign=ERITJKEIJKJHKKKKKKKHJEREEEEEEEEEEE&version=1.0&biz_content=
{
"body":"对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。",
"subject":"大乐透",
"out_trade_no":"70501111111S001111119",
"timeout_express":"90m",
"total_amount":"一共花费了10元",
"product_code":"QUICK_MSECURITY_PAY",
"tips":"测试一笔支付"
}
1.
2.
1.
"subject":"大乐透 这个辣条不错 out_trade_no=123 total_fee=123.5"
,其 value 值中有支付宝关键 key 值out_trade_no
、total_fee
,这样的业务请求参数支付宝将会拦截。2.
app_id=2014072300007148&charset=UTF-8&version=1.0×tamp=2016-07-01 08:08:08&method=alipay.trade.app.pay¬ify_url=https://api.**.com/pay_receive_notify.htm&sign_type=RSA2&sign=ERITJKEIJKJHKKKKKKKHJEREEEEEEEEEEE&version=1.0&biz_content=
{
"body":"对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。",
"subject":"大乐透 这个辣条不错 out_trade_no=123 total_fee=123.5",
"out_trade_no":"70501111111S001111119",
"timeout_express":"90m",
"total_amount":10.0,
"product_code":"QUICK_MSECURITY_PAY"
}
1.
2.
1.
2.
total_amount
(订单金额) ,请务必依赖服务端,不要轻信客户端上行的数据(客户端本地上行数据在用户手机环境中无法确保一定安全)。修改于 2023-11-20 03:34:47