一、创建应用
1.登录支付宝开放平台
支付宝开放平台网址 :支付宝 (alipay.com)
下拉最下边
开始创建项目
1.导入依赖
<dependencies> <!-- Spring Boot Starter Web 包含了 Spring Web 和 Spring MVC --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>3.0.5</version> </dependency> <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.39.134.ALL</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> <version>4.0.2</version> </dependency> <!--nacos配置管理依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <!--开启Spring Cloud 应用程序启动时加载bootstrap配置文件--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> <!-- <version>3.1.4</version>--> </dependency> <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.39.134.ALL</version> </dependency> <!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-easysdk --> <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-easysdk</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> </dependency> </dependencies>
2.创建Controller
准备好密钥
package com.plant.pay.controller; import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.AlipayConfig; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.domain.AlipayTradeWapPayModel; import com.alipay.api.request.AlipayTradeWapPayRequest; import com.alipay.api.response.AlipayTradeWapPayResponse; import com.alipay.easysdk.factory.Factory; import com.plant.pay.domain.PayVo; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Date; import java.util.HashMap; import java.util.Map; @Slf4j @RequestMapping("/pay") @RestController public class PayController { @RequestMapping("/zfb") public String paymoney(@RequestBody PayVo payVo) throws AlipayApiException { System.out.println(payVo); String privateKey = "自己的应用私钥"; //必填 String alipayPublicKey = "自己的支付宝公钥"; //必填 AlipayConfig alipayConfig = new AlipayConfig(); alipayConfig.setServerUrl("https://openapi-sandbox.dl.alipaydev.com/gateway.do"); alipayConfig.setAppId("自己的AppId"); //必填 alipayConfig.setPrivateKey(privateKey); alipayConfig.setFormat("json"); alipayConfig.setAlipayPublicKey(alipayPublicKey); alipayConfig.setCharset("UTF-8"); alipayConfig.setSignType("RSA2"); AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig); AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest(); request.setNotifyUrl("http://hjl789.w1.luyouxia.net/pay/notify"); //自己的内网地址 这个是我的自己可以下载路由下自行配置 request.setReturnUrl(payVo.getUrl()); //成功后跳转的地址 AlipayTradeWapPayModel model = new AlipayTradeWapPayModel(); model.setOutTradeNo(payVo.getOrderId()); //传过来的订单号 这个我写的 自己写一个默认的测试一下 model.setTotalAmount(payVo.getMoney()); //支付金额 这个我写的 自己写一个默认的测试一下 model.setSubject(payVo.getTitle()); //支付标题 这个我写的 自己写一个默认的测试一下 model.setProductCode("QUICK_WAP_WAY"); model.setSellerId("2088721041615706"); request.setBizModel(model); AlipayTradeWapPayResponse response = alipayClient.pageExecute(request, "POST"); // 如果需要返回GET请求,请使用 // AlipayTradeWapPayResponse response = alipayClient.pageExecute(request, "GET"); String pageRedirectionData = response.getBody(); System.out.println(pageRedirectionData); if (response.isSuccess()) { System.out.println("调用成功"); } else { System.out.println("调用失败"); // sdk版本是"4.38.0.ALL"及以上,可以参考下面的示例获取诊断链接 // String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response); // System.out.println(diagnosisUrl); } return pageRedirectionData; } @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"; } }
可以创建一个实体类来接受前端传递过来的参数
这是我的
package com.plant.pay.domain; import lombok.Data; @Data public class PayVo { //订单id private String orderId; //会诊id private String conId; //支付金额 private String money; //支付标题 private String title; //成功返回页面 private String url; }