diff --git a/pom.xml b/pom.xml index 50a9243..4e51373 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ 6.4.11 2.11.0 3.2.2 - 4.1.2 + 5.2.3 4.5.2 2.3 0.9.1 diff --git a/ruoyi-admin/src/main/resources/application-pay.yml b/ruoyi-admin/src/main/resources/application-pay.yml index fb96613..b7fef48 100644 --- a/ruoyi-admin/src/main/resources/application-pay.yml +++ b/ruoyi-admin/src/main/resources/application-pay.yml @@ -5,4 +5,9 @@ pay: terminalKey: "terminalKey" appId: "appId" vendorSn: "vendorSn" - vendorKey: "vendorKey" \ No newline at end of file + vendorKey: "vendorKey" + alipay: + appId: "appId" + privateKey: "privateKey" + publicKey: "publicKey" + notifyUrl: "notifyUrl" \ No newline at end of file diff --git a/ruoyi-pay/ruoyi-pay-alipay/pom.xml b/ruoyi-pay/ruoyi-pay-alipay/pom.xml index df1cbdf..7929522 100644 --- a/ruoyi-pay/ruoyi-pay-alipay/pom.xml +++ b/ruoyi-pay/ruoyi-pay-alipay/pom.xml @@ -22,6 +22,16 @@ ruoyi-pay-common + + com.alipay.sdk + alipay-easysdk + 2.2.0 + + + com.alipay.sdk + alipay-sdk-java + 4.22.110.ALL + \ No newline at end of file diff --git a/ruoyi-pay/ruoyi-pay-alipay/src/main/java/com/ruoyi/pay/alipay/config/AliPayConfig.java b/ruoyi-pay/ruoyi-pay-alipay/src/main/java/com/ruoyi/pay/alipay/config/AliPayConfig.java new file mode 100644 index 0000000..d599f3a --- /dev/null +++ b/ruoyi-pay/ruoyi-pay-alipay/src/main/java/com/ruoyi/pay/alipay/config/AliPayConfig.java @@ -0,0 +1,66 @@ +package com.ruoyi.pay.alipay.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import com.alipay.easysdk.factory.Factory; +import com.alipay.easysdk.kernel.Config; + +import jakarta.annotation.PostConstruct; + +@Component +public class AliPayConfig { + @Value("${pay.alipay.appId}") + private String appId; + @Value("${pay.alipay.privateKey}") + private String privateKey; + @Value("${pay.alipay.publicKey}") + private String publicKey; + @Value("${pay.alipay.notifyUrl}") + private String notifyUrl; + + @PostConstruct + public void init() { + Config config = new Config(); + config.protocol = "https"; + config.gatewayHost = "openapi-sandbox.dl.alipaydev.com"; + config.signType = "RSA2"; + config.appId = this.appId; + config.merchantPrivateKey = this.privateKey; + config.alipayPublicKey = this.publicKey; + config.notifyUrl = this.notifyUrl; + Factory.setOptions(config); + } + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getPrivateKey() { + return privateKey; + } + + public void setPrivateKey(String privateKey) { + this.privateKey = privateKey; + } + + public String getPublicKey() { + return publicKey; + } + + public void setPublicKey(String publicKey) { + this.publicKey = publicKey; + } + + public String getNotifyUrl() { + return notifyUrl; + } + + public void setNotifyUrl(String notifyUrl) { + this.notifyUrl = notifyUrl; + } +} \ No newline at end of file diff --git a/ruoyi-pay/ruoyi-pay-alipay/src/main/java/com/ruoyi/pay/alipay/controller/AliPayController.java b/ruoyi-pay/ruoyi-pay-alipay/src/main/java/com/ruoyi/pay/alipay/controller/AliPayController.java new file mode 100644 index 0000000..1c48f82 --- /dev/null +++ b/ruoyi-pay/ruoyi-pay-alipay/src/main/java/com/ruoyi/pay/alipay/controller/AliPayController.java @@ -0,0 +1,84 @@ +package com.ruoyi.pay.alipay.controller; + +import java.util.HashMap; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.alipay.easysdk.factory.Factory; +import com.alipay.easysdk.payment.page.models.AlipayTradePagePayResponse; +import com.ruoyi.common.annotation.Anonymous; +import com.ruoyi.pay.alipay.config.AliPayConfig; +import com.ruoyi.pay.domain.PayOrder; +import com.ruoyi.pay.mapper.PayOrderMapper; + +import jakarta.servlet.http.HttpServletRequest; + +@RestController +@RequestMapping("/alipay") +public class AliPayController { + + @Autowired + private PayOrderMapper payOrderMapper; + + @Autowired + private AliPayConfig aliPayConfig; + + @GetMapping("/init") + public String init() { + aliPayConfig.init(); + return "success"; + } + + @Anonymous + @GetMapping("/pay") + public String pay(PayOrder payOrder) { + AlipayTradePagePayResponse response; + try { + // 发起API调用(以创建当面付收款二维码为例) + response = Factory.Payment.Page() + .pay(payOrder.getOrderContent(), payOrder.getOrderNumber(), payOrder.getTotalAmount(), ""); + } catch (Exception e) { + System.err.println("调用遭遇异常,原因:" + e.getMessage()); + throw new RuntimeException(e.getMessage(), e); + } + return response.getBody(); + } + + @PostMapping("/notify") // 注意这里必须是POST接口 + public String payNotify(HttpServletRequest request) throws Exception { + if (request.getParameter("trade_status").equals("TRADE_SUCCESS")) { + System.out.println("=========支付宝异步回调========"); + + Map params = new HashMap<>(); + Map requestParams = request.getParameterMap(); + for (String name : requestParams.keySet()) { + params.put(name, request.getParameter(name)); + // System.out.println(name + " = " + request.getParameter(name)); + } + + String orderNumber = params.get("out_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")); + + PayOrder payOrder = payOrderMapper.selectPayOrderByOrderNumber(orderNumber); + payOrder.setOrderStatus("已支付"); + payOrderMapper.updatePayOrder(payOrder); + } + } + return "success"; + } +}