SpringBoot集成支付寶沙箱支付(支付、退款)
前言
支付寶推出一個沙箱環(huán)境,能夠很好的模擬支付寶支付,并且還提供了demo,但demo是一個普通web項(xiàng)目,怎么整合到Spring Boot項(xiàng)目呢,其實(shí)很簡單
簡單配置請參照支付寶沙箱支付開發(fā)文檔
一、支付部分
AlipayConfig配置:我使用的是頁面跳轉(zhuǎn)同步通知,返回路徑return_url為公網(wǎng)訪問地址,也可以使用localhost,且不能攜帶參數(shù),APPID、商戶私鑰、支付寶公鑰和支付寶網(wǎng)關(guān)換為自己的。
public class AlipayConfig{
// 應(yīng)用ID,您的APPID,收款賬號既是您的APPID對應(yīng)支付寶賬號
public static String app_id = "2016091600523365";
// 商戶私鑰,您的PKCS8格式RSA2私鑰
public static String merchant_private_key = "商戶私鑰";
// 支付寶公鑰,查看地址:https://openhome.alipay.com/platform/keyManage.htm 對應(yīng)APPID下的支付寶公鑰。
public static String alipay_public_key = "支付寶公鑰";
// 服務(wù)器異步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數(shù),必須外網(wǎng)可以正常訪問
public static String notify_url = "http://工程公網(wǎng)訪問地址";
// 頁面跳轉(zhuǎn)同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數(shù),必須外網(wǎng)可以正常訪問
public static String return_url = "http://工程公網(wǎng)訪問地址";
// 簽名方式
public static String sign_type = "RSA2";
// 字符編碼格式
public static String charset = "utf-8";
// 支付寶網(wǎng)關(guān)
public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
// 支付寶網(wǎng)關(guān)
public static String log_path = "C:\\";
//↑↑↑↑↑↑↑↑↑↑請?jiān)谶@里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
/**
* 寫日志,方便測試(看網(wǎng)站需求,也可以改成把記錄存入數(shù)據(jù)庫)
* @param sWord 要寫入日志里的文本內(nèi)容
*/
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{
//設(shè)置編碼
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);
//設(shè)置請求參數(shù)
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);
//設(shè)置請求參數(shù)
AlipayTradeRefundRequest alipayRequest = new AlipayTradeRefundRequest();
//商戶訂單號,必填
String out_trade_no = new String(訂單號);
//需要退款的金額,該金額不能大于訂單金額,必填
String refund_amount = new String(退款金額);
//標(biāo)識一次退款請求,同一筆交易多次退款需要保證唯一,如需部分退款,則此參數(shù)必傳
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);以下寫自己的訂單退款代碼
}
退款可按照訂單號或者支付寶訂單號進(jìn)行退款,博主采用的是按訂單號退款。
結(jié)語
以上是沙箱接入的簡要步驟,希望能幫到其他人。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- springboot對接支付寶支付接口(詳細(xì)開發(fā)步驟總結(jié))
- springboot+vue+對接支付寶接口+二維碼掃描支付功能(沙箱環(huán)境)
- springboot調(diào)用支付寶第三方接口(沙箱環(huán)境)
- SpringBoot集成支付寶沙箱支付的實(shí)現(xiàn)示例
- SpringBoot接入支付寶支付的方法步驟
- SpringBoot實(shí)現(xiàn)支付寶沙箱支付的完整步驟
- SpringBoot集成支付寶支付的實(shí)現(xiàn)示例
- SpringBoot下如何實(shí)現(xiàn)支付寶接口的使用
- SpringBoot+MyBatis集成支付寶支付流程
相關(guān)文章
Java中實(shí)現(xiàn)簡單的Excel導(dǎo)出
今天小編就為大家分享一篇關(guān)于Java中實(shí)現(xiàn)簡單的Excel導(dǎo)出,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-01-01
Java基于socket實(shí)現(xiàn)簡易聊天室實(shí)例
這篇文章主要介紹了Java基于socket實(shí)現(xiàn)簡易聊天室的方法,實(shí)例分析了java基于socket實(shí)現(xiàn)聊天室服務(wù)端與客戶端的相關(guān)技巧,需要的朋友可以參考下2015-05-05
Java中的SimpleDateFormat的線程安全問題詳解
這篇文章主要介紹了Java中的SimpleDateFormat的線程安全問題詳解,sonar 是一個代碼質(zhì)量管理工具,SonarQube是一個用于代碼質(zhì)量管理的開放平臺,為項(xiàng)目提供可視化報告, 連續(xù)追蹤項(xiàng)目質(zhì)量演化過程,需要的朋友可以參考下2024-01-01
Springboot JPA打印SQL語句及參數(shù)的實(shí)現(xiàn)
在SpringBoot項(xiàng)目中調(diào)試和優(yōu)化數(shù)據(jù)庫操作是很常見的需求,本文主要介紹了Springboot JPA打印SQL語句及參數(shù)的實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-06-06
SpringBoot DBUnit 單元測試(小結(jié))
這篇文章主要介紹了SpringBoot DBUnit 單元測試(小結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09

