上一篇寫到支付寶的支付,這程式碼copy下來就能直接用了, 我寫學習文件時會經常貼 官方引數文件的案例地址, 因為我覺得 請求引數,響應引數說明 官方文件整理的很好,畢竟官方不會誤導大家.
我學一個新技術的時候最喜歡做的就是把案例程式碼copy到自己的專案裡面跑一遍, 然後再一 一分析每段程式碼的作用.
昨天忘說了 別忘了引入支付寶的SDK :
在這裡說一下,一般接入第三方都會有第三方的SDK包,要把他們放在自己專案裡我們才能接入他們的API.
支付寶SDK下載地址: https://docs.open.alipay.com/54/103419/
然後我們需要把這個jar包引入到所需要的地方,這裡不做過多的描述。
1.檢視支付訂單
該介面提供所有支付寶支付訂單的查詢,商戶可以通過該介面主動查詢訂單狀態,獲取這個訂單的資訊.
重要引數 Out_Trade_No : 商戶網站唯一訂單號,也就是自己專案生成訂單號 Trade_No 支付寶交易號, 是支付寶端給這個交易生成的訂單交易號.
貼程式碼:
/** * * 說明:檢視支付訂單 * @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.支付寶訂單退款
當交易發生之後一段時間內,由於買家或者賣家的原因需要退款時,賣家可以通過退款介面將支付款退還給買家,支付寶將在收到退款請求並且驗證成功之後,按照退款規則將支付款按原路退到買家帳號上。 交易超過約定時間(簽約時設定的可退款時間)的訂單無法進行退款 支付寶退款支援單筆交易分多次退款,多次退款需要提交原支付訂單的商戶訂單號和設定不同的退款單號。一筆退款失敗後重新提交,要採用原來的退款單號。總退款金額不能超過使用者實際支付金額
/** * * 說明: 支付寶訂單退款 * @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) {
//填寫自己建立的app的對應引數 AlipayClient alipayClient = new DefaultAlipayClient("支付寶閘道器", "appid", "私鑰", "json", "utf-8", "公鑰","RSA2");
//訂單編號 支付寶交易號不為空 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/
個人覺得沒有什麼比 簡潔,通俗,易懂,有註釋的程式碼能讓讀者更容易看懂的了.
然後我還接觸到一個功能就是單筆轉賬到支付寶賬戶, 因為客戶說 如果能直接提現到支付寶 或者微信 就暫時不做提現到銀行卡的操作, 所以就直接從商戶支付寶單筆轉賬到使用者支付寶裡實現了這個功能, 有時間 再貼出來.( ˘ ³˘)