上一篇寫到支付寶的支付,這代碼copy下來就能直接用了, 我寫學習文檔時會經常貼 官方參數文檔的案例地址, 因為我覺得 請求參數,響應參數說明 官方文檔整理的很好,畢竟官方不會誤導大家.
我學一個新技術的時候最喜歡做的就是把案例代碼copy到自己的項目里面跑一遍, 然后再一 一分析每段代碼的作用.
昨天忘說了 別忘了引入支付寶的SDK :
在這里說一下,一般接入第三方都會有第三方的SDK包,要把他們放在自己項目里我們才能接入他們的API.
支付寶SDK下載地址: https://docs.open.alipay.com/54/103419/
然后我們需要把這個jar包引入到所需要的地方,這里不做過多的描述。
1.查看支付訂單
該接口提供所有支付寶支付訂單的查詢,商戶可以通過該接口主動查詢訂單狀態,獲取這個訂單的信息.
重要參數 Out_Trade_No : 商戶網站唯一訂單號,也就是自己項目生成訂單號 Trade_No 支付寶交易號, 是支付寶端給這個交易生成的訂單交易號.
貼代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
/**
*
* 說明:查看支付訂單
* @param Out_Trade_No 商戶網站唯一訂單號
* @param Trade_No 支付寶交易號
* @return 公共響應參數 code,msg 響應參數: https://docs.open.alipay.com/api_1/alipay.trade.query
* @author 許奧倫
* @time:2018年12月11日 下午2:19:44
*/
@Override
public
String queryPayment(String Out_Trade_No,String Trade_No) {
//填寫自己創建的app的對應參數
AlipayClient alipayClient =
new
DefaultAlipayClient(
"支付寶網關"
,
"appid"
,
"私鑰"
,
"json"
,
"utf-8"
,
"公鑰"
,
"RSA2"
);
AlipayTradeQueryRequest alipay_request =
new
AlipayTradeQueryRequest();
AlipayTradeQueryModel model=
new
AlipayTradeQueryModel();
model.setOutTradeNo(Out_Trade_No);
model.setTradeNo(Trade_No);
alipay_request.setBizModel(model);
try
{
AlipayTradeQueryResponse alipay_response = alipayClient.execute(alipay_request);
String queryPaymentStr = alipay_response.getBody();
System.out.println(queryPaymentStr);
return
queryPaymentStr;
}
catch
(AlipayApiException e) {
e.printStackTrace();
}
return
null
;
}
|
會返回 訂單金額,訂單狀態,買家支付寶賬號等很多數據, 官方參數字典:https://docs.open.alipay.com/api_1/alipay.trade.query
2.支付寶訂單退款
當交易發生之后一段時間內,由於買家或者賣家的原因需要退款時,賣家可以通過退款接口將支付款退還給買家,支付寶將在收到退款請求並且驗證成功之后,按照退款規則將支付款按原路退到買家帳號上。 交易超過約定時間(簽約時設置的可退款時間)的訂單無法進行退款 支付寶退款支持單筆交易分多次退款,多次退款需要提交原支付訂單的商戶訂單號和設置不同的退款單號。一筆退款失敗后重新提交,要采用原來的退款單號。總退款金額不能超過用戶實際支付金額
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
/**
*
* 說明: 支付寶訂單退款
* @param out_trade_no 訂單編號
* @param trade_no 支付寶訂單交易號
* @param refund_amount 退款金額 不得大於訂單金額
* @param refund_reason 退款說明
* @param out_request_no 標識一次退款請求,同一筆交易多次退款需要保證唯一,如需部分退款,則此參數必傳。
* @return 公共返回參數 code,msg, 響應參數實例: https://docs.open.alipay.com/api_1/alipay.trade.refund
* @author 許奧倫
* @time:2018年12月11日 下午2:29:13
*/
@Override
public
String alipayRefund(String out_trade_no,
String trade_no,
String refund_amount,
String refund_reason,
String out_request_no) {
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
//填寫自己創建的app的對應參數 AlipayClient alipayClient = new DefaultAlipayClient("支付寶網關", "appid", "私鑰", "json", "utf-8", "公鑰","RSA2");<br>
//訂單編號 支付寶交易號不為空
if
(out_trade_no!=
null
&& trade_no!=
null
) {
AlipayTradeRefundRequest alipay_request =
new
AlipayTradeRefundRequest();
AlipayTradeRefundModel model=
new
AlipayTradeRefundModel();
model.setOutTradeNo(out_trade_no);
model.setTradeNo(trade_no);
model.setRefundAmount(refund_amount);
model.setRefundReason(refund_reason);
model.setOutRequestNo(out_request_no);
alipay_request.setBizModel(model);
try
{
AlipayTradeRefundResponse alipay_response = alipayClient.execute(alipay_request);
String alipayRefundStr = alipay_response.getBody();
System.out.println(alipayRefundStr);
return
alipayRefundStr;
}
catch
(AlipayApiException e) {
e.printStackTrace();
}
}
return
null
;
}
|
會返回公共參數 code,msg 等狀態提示你 退款成功或者退款失敗 官方響應參數: https://docs.open.alipay.com/api_1/alipay.trade.refund/