天天看點

Java 支付寶支付,退款,單筆轉賬到支付寶賬戶(支付寶訂單退款)

   上一篇寫到支付寶的支付,這代碼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 ArLen
	 * @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 ArLen
	 * @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/

個人覺得沒有什麼比 簡潔,通俗,易懂,有注釋的代碼能讓讀者更容易看懂的了.

  然後我還接觸到一個功能就是單筆轉賬到支付寶賬戶,  因為客戶說 如果能直接提現到支付寶 或者微信 就暫時不做提現到銀行卡的操作,  是以就直接從商戶支付寶單筆轉賬到使用者支付寶裡實作了這個功能, 有時間 再貼出來.( ˘ ³˘)

Java 支付寶支付,退款,單筆轉賬到支付寶賬戶(支付寶訂單退款)