下载依赖
<!-- ZXing Core 依赖 -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.4.1</version> <!-- 或者更高版本 -->
<!-- 这个依赖包含了 ZXing 核心功能,包括条形码和二维码的编码和解码算法 -->
</dependency>
<!-- ZXing JavaSE 依赖 -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.4.1</version> <!-- 或者更高版本 -->
<!-- 这个依赖包含了 ZXing 在 Java SE 环境下的实现,包括图像处理和图形用户界面相关的类 -->
</dependency>
配置秘钥
登陆支付宝沙箱平台:小程序应用文档指引 - 支付宝文档中心 (alipay.com)
设置自定义秘钥
下载加密工具 小程序文档 - 支付宝文档中心
配置
alipay:
appId: //id
appPrivateKey: //私钥
alipayPublicKey: //公钥
notifyUrl: //回调地址
# 我的支付宝网关地址 (不需要改)
gatewayUrl: https://openapi-sandbox.dl.alipaydev.com/gateway.do
新增配置类 AlipayTemplate
@ConfigurationProperties(prefix = "alipay")
@Component
@Data
public class AlipayTemplate {
// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
@Value("{alipay.appId}")
public String appId;
// 应用私钥,就是工具生成的应用私钥
@Value("{alipay.merchantPrivateKey}")
public String merchantPrivateKey;
// 支付宝公钥,对应APPID下的支付宝公钥。
@Value("{alipay.alipayPublicKey}")
public String alipayPublicKey;
// 支付宝会悄悄的给我们发送一个请求,告诉我们支付成功的信息
@Value("{alipay.notifyUrl}")
public String notifyUrl;
//同步通知,支付成功,一般跳转到成功页
@Value("{alipay.returnUrl}")
public String returnUrl;
// 签名方式
@Value("{alipay.signType}")
private String signType;
// 字符编码格式
@Value("{alipay.charset}")
private String charset;
//订单超时时间
private String timeout = "1m";
// 支付宝网关;https://openapi-sandbox.dl.alipaydev.com/gateway.do
@Value("{alipay.gatewayUrl}")
public String gatewayUrl;
public String pay(Order order) throws
AlipayApiException {
//1、根据支付宝的配置生成一个支付客户端
AlipayClient alipayClient = new
DefaultAlipayClient(gatewayUrl, appId, merchantPrivateKey,
"json", charset, alipayPublicKey, signType);
//2、创建一个支付请求,并设置请求参数
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
alipayRequest.setReturnUrl(returnUrl);
alipayRequest.setNotifyUrl(notifyUrl);
Long id = order.getId();
Long interfaceInfoId = order.getInterfaceInfoId();
Double money = order.getMoney();
String paymentMethod = order.getPaymentMethod();
alipayRequest.setBizContent(" {\"out_trade_no\":\"" + id + "\","
+ "\"total_amount\":\"" + money + "\","
+ "\"subject\":\"" + interfaceInfoId
+ "\","
+ "\"body\":\"" + paymentMethod + "\","
+
"\"timeout_express\":\"" + timeout + "\","
+
"\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
String result = alipayClient.pageExecute(alipayRequest).getBody();
//会收到支付宝的响应,响应的是一个页面,只要浏览器显示这个页面,就会自动来到支付宝的收银台页面
System.out.println("支付宝的响应:" + result);
return result;
}
}
新增业务类 AliPayController
@RestController
@RequestMapping("/alipay")
public class AliPayController {
@Resource
AlipayTemplate alipayTemplate;
@GetMapping(value = "/pay", produces = "text/html")
@ResponseBody
public String pay(@RequestParam long orderId,double money) throws AlipayApiException {
Order order = new Order();
order.setId(orderId);
order.setUserId(129904058947L);
order.setInterfaceInfoId(294389472934L);
order.setMoney(money);
order.setPaymentMethod("支付宝");
return alipayTemplate.pay(order);
}
@PostMapping("/notify") // 注意这里必须是POST接口
public String payNotify(HttpServletRequest request) throws Exception {
if (request.getParameter("trade_status").equals("TRADE_SUCCESS")) {
System.out.println("=========支付宝异步回调========");
Map<String, String> params = new HashMap<>();
Map<String, String[]> requestParams = request.getParameterMap();
for (String name : requestParams.keySet()) {
params.put(name, request.getParameter(name));
// System.out.println(name + " = " + request.getParameter(name));
}
String tradeNo = params.get("out_trade_no");
String gmtPayment = params.get("gmt_payment");
String alipayTradeNo = params.get("trade_no");
// 支付宝验签
if (Factory.Payment.Common().verifyNotify(params)) {
// 验签通过
System.out.println("交易名称: " + params.get("subject"));
System.out.println("交易状态: " + params.get("trade_status"));
System.out.println("支付宝交易凭证号: " + params.get("trade_no"));
System.out.println("商户订单号: " + params.get("out_trade_no"));
System.out.println("交易金额: " + params.get("total_amount"));
System.out.println("买家在支付宝唯一id: " + params.get("buyer_id"));
System.out.println("买家付款时间: " + params.get("gmt_payment"));
System.out.println("买家付款金额: " + params.get("buyer_pay_amount"));
// 更新订单状态
}
}
return "success";
}
}
启动项目访问 http://127.0.0.1:9003/alipay/pay?orderId=100&money=10000