1.整合依赖
1.生成签名
2.开通沙箱环境
2.引入依赖
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-easysdk</artifactId>
<version>2.0.1</version>
</dependency>
3.创建配置文件(放入alipay.properties中)
alipay.protocol=https
alipay.gatewayHost=openapi.alipaydev.com
alipay.signType=RSA2
alipay.appId=<APPID>
alipay.merchantPrivateKey=<应用私钥>
alipay.notifyUrl=<异步回调地址>
alipay.returnUrl=<同步回调地址>
alipay.encryptKey=<AES密钥>
alipay.successUrl=<支付成功后的跳转页面>
4.创建配置文件对象类
package com.example.aliyay.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component
@PropertySource("classpath:alipay.properties")
@ConfigurationProperties("alipay")
public class AliPayConfig {
private String protocol;
private String gatewayHost;
private String signType;
private String appId;
private String merchantPrivateKey;
private String notifyUrl;
private String returnUrl;
private String encryptKey;
private String alipayPublicKey;
private String successUrl;
}
5.创建工具类
package com.example.aliyay.utils;
import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.factory.Factory.Payment;
import com.alipay.easysdk.kernel.Config;
import com.alipay.easysdk.kernel.util.ResponseChecker;
import com.alipay.easysdk.payment.page.models.AlipayTradePagePayResponse;
import com.example.aliyay.config.AliPayConfig;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Map;
@Component
public class AliPayUtils {
@Resource
private AliPayConfig aliPayConfig;
public AliPayConfig getAliPayConfig() {
return aliPayConfig;
}
public String toPcPay(String sunject, String payNo, String amount) {
String result = "";
Factory.setOptions(getOptions());
try {
AlipayTradePagePayResponse response = Payment.Page().pay(sunject, payNo, amount, aliPayConfig.getReturnUrl());
if (ResponseChecker.success(response)) {
result = response.body;
System.out.println("调用成功");
} else {
System.err.println("调用失败,原因:" + response.body);
}
} catch (Exception e) {
System.err.println("调用遭遇异常,原因:" + e.getMessage());
throw new RuntimeException(e.getMessage(), e);
}
return result;
}
private Config getOptions() {
Config config = new Config();
config.protocol = aliPayConfig.getProtocol();
config.gatewayHost = aliPayConfig.getGatewayHost();
config.signType = aliPayConfig.getSignType();
config.appId = aliPayConfig.getAppId();
config.merchantPrivateKey = aliPayConfig.getMerchantPrivateKey();
config.encryptKey = aliPayConfig.getEncryptKey();
config.notifyUrl = aliPayConfig.getNotifyUrl();
config.alipayPublicKey = aliPayConfig.getAlipayPublicKey();
return config;
}
public Boolean verify(Map<String, String> parameters) throws Exception {
return Factory.Payment.Common().verifyNotify(parameters);
}
}
5.创建控制器类
package com.example.aliyay.controller;
import com.example.aliyay.utils.AliPayUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
@Controller
@RequestMapping("/api/pay")
public class TestController {
@Resource
private AliPayUtils aliPayUtils;
/**
* 跳转到支付页
*
* @param subject
* @param payno
* @param amount
* @return
*/
@ResponseBody
@PostMapping("/alipay")
public String aliPay(String subject, String payno, String amount) {
return aliPayUtils.toPcPay(subject, payno, amount);
}
/**
* 支付成功回调函数
*
* @param request
* @return
* @throws Exception
*/
@RequestMapping("/returnDeal")
public String returnDeal(HttpServletRequest request) throws Exception {
// 获取支付宝响应参数
Map<String, String[]> params = request.getParameterMap();
Map<String, String> paramters = new HashMap<>();
params.entrySet();
for (Map.Entry<String, String[]> entry : params.entrySet()) {
paramters.put(entry.getKey(), entry.getValue()[0]);
}
// 验签
boolean flag = aliPayUtils.verify(paramters);
if (!flag) {
return "fail";
}
return "redirect:" + aliPayUtils.getAliPayConfig().getSuccessUrl();
}
}
7.创建测试支付表单
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>支付测试页</title>
</head>
<body>
<form action="/api/pay/alipay" method="POST">
<label for="subject">项目名:</label>
<input type="text" name="subject">
<br>
<label for="payno">订单号:</label>
<input type="text" name="payno">
<br>
<label for="amount">订单金额:</label>
<input type="text" name="amount">
<br>
<input type="submit" value="支付">
</form>
</body>
</html>