引入依赖
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-easysdk</artifactId>
<version>2.2.2</version>
</dependency>
创建一个aliPay配置类
package com.jiusi.config;
import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.kernel.Config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
@Data
@ConfigurationProperties(prefix = "alipay")
@Configuration
public class AliPayConfig {
// 应用Id
private String appId;
// 应用私有
private String appPrivateKey;
// 支付宝公钥
private String publiceKey;
// 回调接口路径
private String notifyUrl;
// 支付宝网关地址
private String gatewayHost;
@PostConstruct
public void init(){
Config config = new Config();
config.protocol = "https";
config.gatewayHost = this.gatewayHost;// 支付宝网关地址
config.signType = "RSA2";
// 业务配置
config.appId = this.appId;
config.merchantPrivateKey = this.appPrivateKey;
config.alipayPublicKey = this.publiceKey;
config.notifyUrl = this.notifyUrl;
Factory.setOptions(config);
System.out.println("支付宝相关配置完成");
}
}
配置文件
alipay:
appId: 9021000136681693
appPrivateKey: 支付宝沙箱私钥
publiceKey: 支付宝沙箱公钥
notifyUrl: 公网地址+接口返回路径
gatewayHost: openapi-sandbox.dl.alipaydev.com
业务代码
package com.jiusi.controller;
import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.payment.page.models.AlipayTradePagePayResponse;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
public class AliPayController {
@GetMapping("/api/pay")
public String pay(String subject, String outTradeNo, String totalAmount, String returnUrl) throws Exception {
//调用支付宝支付接口
AlipayTradePagePayResponse pay = Factory.Payment.Page().pay(subject, outTradeNo, totalAmount, returnUrl);
String body = pay.getBody();
return body;
}
@PostMapping("/api/notify") //接口返回路径
public String payOk(@RequestParam Map param) throws Exception {
String tradeStatus = param.getOrDefault("trade_status", "").toString();
//判断是否支付成功
if(tradeStatus.trim().equals("TRADE_SUCCESS")){
//判断是否从支付宝回调的参数
if(Factory.Payment.Common().verifyNotify(param)){
return "success";
}
}
return "no";
}
}