【java】支付寶實現退款功能

        最近完成的差不多的項目突然需要加退款的流程需求了,所以來小小的實現以下。

其實對比其他的支付和退款來說,支付寶算是特別專業,也是特別簡單的一個了,所以,先拿他來開刀了。


一、引入支付寶SDK


        在這裏說一下,其實每種支付都會有一個官方帶的SDK,我們可以把這個sdk引入到我們的項目中去,然後我們就可以調用裏面的方法和對象,給裏面傳值,進行我們相應的請求的訪問和介入。

        

首先引入如上圖所示的jar包,然後我們就算是成功了一半了。下載地址:

https://docs.open.alipay.com/54/103419/

         然後我們需要把這個jar包引入到所需要的地方,這裏不做過多的描述。


二、找到需要的資源


        做支付,最最基本的還是各種appid,還有公鑰,私鑰,以及請求的網關等等內容,支付寶需要的包括:

APP_ID:開放平臺賬號申請的appid

requestUrl:實現功能所需要請求的網關地址

APP_PRIVATE_KEY:用戶自己生成的私鑰

ALIPAY_PUBLIC_KEY:支付寶生成的公鑰

CHARSET:我們需要的字符編碼,一般爲utf-8的


三、編寫請求代碼


         

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeRefundModel;
import com.alipay.api.request.AlipayTradeRefundRequest;
import com.alipay.api.response.AlipayTradeRefundResponse;

public class AlipayUtil {
	
    private static final Logger LOGGER = LoggerFactory.getLogger(AlipayUtil.class);   
    private static String APP_ID = "234789720984098";
	
    //支付寶退款請求的網關
    private static String requestUrl = "https://openapi.alipay.com/gateway.do";
    //用戶自己生成的私鑰
    private static String APP_PRIVATE_KEY = "隨機字符,見文檔";
    //支付寶公鑰
    private static String ALIPAY_PUBLIC_KEY = "從支付寶中獲得";
    
    //編碼級別
    private static String CHARSET = "UTF-8";
    
    public static String refundOrder(AliRefundTO aliRefundTO){
  	System.out.println("開始調用支付寶加密******************************************************");
  	//實例化客戶端
    	AlipayClient alipayClient = new DefaultAlipayClient(requestUrl, APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");
    	//SDK已經封裝掉了公共參數,這裏只需要傳入業務參數。以下方法爲sdk的model入參方式(model和biz_content同時存在的情況下取biz_content)。
    	AlipayTradeRefundModel refundModel = new AlipayTradeRefundModel();
    	refundModel.setTradeNo(aliRefundTO.getTrade_no());
    	refundModel.setRefundAmount(aliRefundTO.getRefund_amount());
    	refundModel.setRefundReason("商品退款");
    	//實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.trade.app.pay
    	AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
    	request.setBizModel(refundModel);
    	try{
    		AlipayTradeRefundResponse response = alipayClient.execute(request);
    		System.out.println(response.getMsg()+"\n");
    		System.out.println(response.getBody());
    	}catch(Exception e){
    		e.printStackTrace();
    		LOGGER.error("支付寶退款錯誤!",e.getMessage());    		
    	}    
    	return "";    	
  	}
  
  	public static void main(String[] arg){
  		AliRefundTO aliRefundTO=new AliRefundTO();
  		aliRefundTO.setRefund_amount("0.01");
  		aliRefundTO.setTrade_no("2018050421001004310518105890");
  		String res=refundOrder(aliRefundTO);
  	}
}

這裏的AliRefundTO 是封裝的一個實體,裏面都是退款所需要的數據,包括流水單號,還有需要退款的金額等等。


發佈了209 篇原創文章 · 獲贊 186 · 訪問量 60萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章