下面为你详细介绍使用 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_id
merchant-private-key: your_merchant_private_key
alipay-public-key: your_alipay_public_key
sign-type: RSA2
gateway-url: https://openapi.alipay.com/gateway.do
notify-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;
@Bean
public 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 {
@Autowired
private 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 {
@Autowired
private 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 {
@Autowired
private 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 处理前端的支付和退款请求,调用服务类的方法完成支付和退款操作。
注意事项
要保证私钥和公钥的正确性与安全性。
处理支付和退款回调时,要对签名进行验证,防止数据被篡改。
严格按照支付宝的开发文档进行开发,及时处理可能出现的异常情况。

被折叠的 条评论
为什么被折叠?



