溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot集成支付寶沙箱支付(支付、退款)

發(fā)布時間:2020-10-02 00:43:25 來源:腳本之家 閱讀:265 作者:AlgerFan 欄目:編程語言

前言

支付寶推出一個沙箱環(huán)境,能夠很好的模擬支付寶支付,并且還提供了demo,但demo是一個普通web項目,怎么整合到Spring Boot項目呢,其實很簡單

簡單配置請參照支付寶沙箱支付開發(fā)文檔

一、支付部分

AlipayConfig配置:我使用的是頁面跳轉同步通知,返回路徑return_url為公網訪問地址,也可以使用localhost,且不能攜帶參數,APPID、商戶私鑰、支付寶公鑰和支付寶網關換為自己的。

public class AlipayConfig{
 // 應用ID,您的APPID,收款賬號既是您的APPID對應支付寶賬號
 public static String app_id = "2016091600523365";
 
 // 商戶私鑰,您的PKCS8格式RSA2私鑰
 public static String merchant_private_key = "商戶私鑰";
 // 支付寶公鑰,查看地址:https://openhome.alipay.com/platform/keyManage.htm 對應APPID下的支付寶公鑰。
 public static String alipay_public_key = "支付寶公鑰";
 // 服務器異步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常訪問
 public static String notify_url = "http://工程公網訪問地址";
 
 // 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常訪問
 public static String return_url = "http://工程公網訪問地址";
 
 // 簽名方式
 public static String sign_type = "RSA2";
 
 // 字符編碼格式
 public static String charset = "utf-8";
 
 // 支付寶網關
 public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
 
 // 支付寶網關
 public static String log_path = "C:\\";
 
 
//↑↑↑↑↑↑↑↑↑↑請在這里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
 
 /**
  * 寫日志,方便測試(看網站需求,也可以改成把記錄存入數據庫)
  * @param sWord 要寫入日志里的文本內容
  */
 public static void logResult(String sWord) {
  FileWriter writer = null;
  try {
   writer = new FileWriter(log_path + "alipay_log_" + System.currentTimeMillis()+".txt");
   writer.write(sWord);
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (writer != null) {
    try {
     writer.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
 }
}

支付請求接口:

@RequestMapping("ali")
 public void ali(HttpServletResponse response, HttpServletRequest request) throws IOException, AlipayApiException {
  ordersService.ali(response,request);
 }

ServiceImpl層:

@Override
public void ali(HttpServletResponse response, HttpServletRequest request) throws AlipayApiException, IOException{
  //設置編碼
  response.setContentType("text/html;charset=utf-8");
 
  PrintWriter out = response.getWriter();
  //獲得初始化的AlipayClient
  AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
  //設置請求參數
  AlipayTradePagePayRequest aliPayRequest = new AlipayTradePagePayRequest();
  aliPayRequest.setReturnUrl(AlipayConfig.return_url);
  aliPayRequest.setNotifyUrl(AlipayConfig.notify_url);
 
  //商戶訂單號,后臺可以寫一個工具類生成一個訂單號,必填
  String order_number = new String(訂單號);
  //付款金額,從前臺獲取,必填
  String total_amount = new String(付款金額);
  //訂單名稱,必填
  String subject = new String("支付寶沙箱支付(名稱隨便起)");
  aliPayRequest.setBizContent("{\"out_trade_no\":\"" + order_number + "\","
    + "\"total_amount\":\"" + total_amount + "\","
    + "\"subject\":\"" + subject + "\","
    + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
  //請求
  String result = alipayClient.pageExecute(aliPayRequest).getBody();
  //輸出
  out.println(result);//以下寫自己的訂單代碼
}

其中:

PrintWriter out = response.getWriter();
out.println(result);

是將支付寶請求輸出在頁面上。

二、退款

ServiceImpl層:

//退款
@Override
public void refund(HttpServletResponse response,HttpSession session) throws IOException, AlipayApiException {
 response.setContentType("text/html;charset=utf-8");
 PrintWriter out = response.getWriter();
 //獲得初始化的AlipayClient
 AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
 //設置請求參數
 AlipayTradeRefundRequest alipayRequest = new AlipayTradeRefundRequest();
 //商戶訂單號,必填
 String out_trade_no = new String(訂單號);
 //需要退款的金額,該金額不能大于訂單金額,必填
 String refund_amount = new String(退款金額);
 //標識一次退款請求,同一筆交易多次退款需要保證唯一,如需部分退款,則此參數必傳
 String out_request_no = new String(UUID.randomUUID().toString());
 
 alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
   + "\"refund_amount\":\""+ refund_amount +"\","
   + "\"out_request_no\":\""+ out_request_no +"\"}");
 //請求
 String result = alipayClient.execute(alipayRequest).getBody();
 //輸出
 out.println(result);以下寫自己的訂單退款代碼
}

退款可按照訂單號或者支付寶訂單號進行退款,博主采用的是按訂單號退款。

結語 

以上是沙箱接入的簡要步驟,希望能幫到其他人。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI