springboot实现支付宝沙箱支付前后端案例详解
时间: 2023-11-05 17:03:56 浏览: 168
SpringBoot集成支付宝沙箱支付(支付、退款)
支付宝沙箱环境是用于模拟支付宝正式环境的测试环境,可以进行支付宝支付的测试。本文将介绍如何使用Spring Boot实现支付宝沙箱支付前后端案例。
1. 创建Spring Boot项目
使用IDEA或Eclipse创建一个新的Spring Boot项目,并添加以下依赖:
```
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.9.5.ALL</version>
</dependency>
```
2. 配置支付宝沙箱环境
在支付宝开放平台注册并创建应用后,进入沙箱环境,获取沙箱环境的AppID、RSA私钥和公钥,并将其配置到项目中。
```
#支付宝沙箱环境配置
alipay.gateway=https://openapi.alipaydev.com/gateway.do
alipay.app-id=应用ID
alipay.private-key=应用私钥
alipay.public-key=支付宝公钥
```
3. 创建支付宝支付接口
创建一个支付宝支付接口,用于生成支付宝支付的请求参数。
```
@RestController
public class AlipayController {
@Autowired
private AlipayProperties alipayProperties;
@GetMapping("/alipay")
public String alipay(HttpServletRequest request, HttpServletResponse response) throws Exception {
//实例化客户端
AlipayClient alipayClient = new DefaultAlipayClient(alipayProperties.getGateway(),
alipayProperties.getAppId(),
alipayProperties.getPrivateKey(),
"json",
"utf-8",
alipayProperties.getPublicKey(),
"RSA2");
//创建API对应的request
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
//在公共参数中设置回跳和通知地址
alipayRequest.setReturnUrl(alipayProperties.getReturnUrl());
alipayRequest.setNotifyUrl(alipayProperties.getNotifyUrl());
//填充业务参数
alipayRequest.setBizContent("{\"out_trade_no\":\"" + 1 + "\","
+ "\"total_amount\":\"" + 0.01 + "\","
+ "\"subject\":\"" + "测试商品" + "\","
+ "\"body\":\"" + "测试商品详情" + "\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
//调用SDK生成表单
String form = alipayClient.pageExecute(alipayRequest).getBody();
//直接将完整的表单html输出到页面
response.setContentType("text/html;charset=utf-8");
response.getWriter().write(form);
response.getWriter().flush();
response.getWriter().close();
return null;
}
}
```
4. 创建支付宝回调接口
创建一个支付宝回调接口,用于接收支付宝支付的异步通知。
```
@RestController
public class AlipayNotifyController {
@PostMapping("/notify")
public String notify(HttpServletRequest request) throws Exception {
//获取支付宝POST过来反馈信息
Map<String, String> params = new HashMap<String, String>();
Map<String, String[]> requestParams = request.getParameterMap();
for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
String name = iter.next();
String[] values = requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
}
//乱码解决,这段代码在出现乱码时使用
valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
params.put(name, valueStr);
}
//调用SDK验证签名
boolean signVerified = AlipaySignature.rsaCheckV1(params, alipayProperties.getPublicKey(),
"utf-8", "RSA2");
if (signVerified) {
//验证成功,处理业务逻辑
return "success";
} else {
//验证失败
return "fail";
}
}
}
```
5. 创建支付宝前端页面
创建一个支付宝前端页面,用于调用支付宝支付的接口。
```
<html>
<head>
<meta charset="UTF-8">
<title>支付宝沙箱支付</title>
</head>
<body>
<div>
<button onclick="alipay()">支付宝支付</button>
</div>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script>
function alipay() {
$.get("/alipay", function (data) {
$("body").html(data);
})
}
</script>
</body>
</html>
```
6. 测试支付宝沙箱支付
启动Spring Boot项目,访问支付宝前端页面,点击“支付宝支付”按钮,跳转到支付宝支付页面,输入支付宝账号和密码进行支付。支付成功后,会触发支付宝回调接口中的逻辑。
阅读全文