下面為你詳細介紹使用 Spring Boot 對接支付寶支付,實現支付與退款功能的具體步驟和代碼示例。
- 添加依賴
在 pom.xml 里添加支付寶 SDK 依賴:
<dependencies><!-- Spring Boot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 支付寶 SDK --><dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>4.10.103.ALL</version></dependency>
</dependencies>
- 配置支付寶信息
在 application.yml 中配置支付寶相關信息:
alipay:app-id: your_app_idmerchant-private-key: your_merchant_private_keyalipay-public-key: your_alipay_public_keysign-type: RSA2gateway-url: https://openapi.alipay.com/gateway.donotify-url: your_notify_url
- 配置支付寶客戶端
創建配置類來初始化支付寶客戶端:
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class AlipayConfig {@Value("${alipay.app-id}")private String appId;@Value("${alipay.merchant-private-key}")private String merchantPrivateKey;@Value("${alipay.alipay-public-key}")private String alipayPublicKey;@Value("${alipay.sign-type}")private String signType;@Value("${alipay.gateway-url}")private String gatewayUrl;@Beanpublic AlipayClient alipayClient() {return new DefaultAlipayClient(gatewayUrl, appId, merchantPrivateKey, "json", "UTF-8", alipayPublicKey, signType);}
}
- 實現支付功能
創建服務類來處理支付業務邏輯:
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;@Service
public class AlipayService {@Autowiredprivate AlipayClient alipayClient;@Value("${alipay.notify-url}")private String notifyUrl;public String pay(String outTradeNo, String totalAmount, String subject, String body) throws AlipayApiException {AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();request.setReturnUrl(null);request.setNotifyUrl(notifyUrl);request.setBizContent("{\"out_trade_no\":\"" + outTradeNo + "\","+ "\"total_amount\":\"" + totalAmount + "\","+ "\"subject\":\"" + subject + "\","+ "\"body\":\"" + body + "\","+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");return alipayClient.pageExecute(request).getBody();}
}
- 實現退款功能
在服務類中添加退款方法:
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.request.AlipayTradeRefundRequest;
import com.alipay.api.response.AlipayTradeRefundResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class AlipayService {@Autowiredprivate AlipayClient alipayClient;public AlipayTradeRefundResponse refund(String outTradeNo, String refundAmount) throws AlipayApiException {AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();request.setBizContent("{\"out_trade_no\":\"" + outTradeNo + "\","+ "\"refund_amount\":\"" + refundAmount + "\"}");return alipayClient.execute(request);}
}
- 創建控制器
創建控制器來處理支付和退款請求:
import com.alipay.api.AlipayApiException;
import com.alipay.api.response.AlipayTradeRefundResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@RestController
@RequestMapping("/alipay")
public class AlipayController {@Autowiredprivate AlipayService alipayService;@GetMapping("/pay")public void pay(@RequestParam String outTradeNo, @RequestParam String totalAmount, @RequestParam String subject, @RequestParam String body, HttpServletResponse response) throws AlipayApiException, IOException {String form = alipayService.pay(outTradeNo, totalAmount, subject, body);response.setContentType("text/html;charset=" + "UTF-8");response.getWriter().write(form);response.getWriter().flush();response.getWriter().close();}@GetMapping("/refund")public AlipayTradeRefundResponse refund(@RequestParam String outTradeNo, @RequestParam String refundAmount) throws AlipayApiException {return alipayService.refund(outTradeNo, refundAmount);}
}
代碼解釋
依賴添加:引入 Spring Boot Web 和支付寶 SDK 依賴,以支持 Web 開發和支付寶支付功能。
配置信息:在 application.yml 中配置支付寶所需的關鍵信息,如應用 ID、商戶私鑰、支付寶公鑰等。
支付寶客戶端配置:創建 AlipayConfig 類初始化支付寶客戶端。
支付服務類:AlipayService 類包含支付和退款的業務邏輯,調用支付寶客戶端的方法完成相應操作。
控制器:AlipayController 處理前端的支付和退款請求,調用服務類的方法完成支付和退款操作。
注意事項
要保證私鑰和公鑰的正確性與安全性。
處理支付和退款回調時,要對簽名進行驗證,防止數據被篡改。
嚴格按照支付寶的開發文檔進行開發,及時處理可能出現的異常情況。