From 9cc1d42d0e87e5eb335d5833ef44314c45d0d355 Mon Sep 17 00:00:00 2001
From: gaoqr <13665037151@163.com>
Date: Tue, 8 Apr 2025 18:28:04 +0800
Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=94=AF=E4=BB=98=E6=A8=A1?=
=?UTF-8?q?=E5=9D=97=EF=BC=9A=E6=B5=8B=E8=AF=95=E9=98=BF=E9=87=8C=E4=BA=91?=
=?UTF-8?q?=E6=B2=99=E7=AE=B1=E5=9B=9E=E8=B0=83?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
cf-module-system/cf-module-system-biz/pom.xml | 9 +-
.../controller/admin/pay/PayController.java | 114 ++++++++++++++++++
.../src/main/resources/application.yaml | 1 +
3 files changed, 123 insertions(+), 1 deletion(-)
create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/pay/PayController.java
diff --git a/cf-module-system/cf-module-system-biz/pom.xml b/cf-module-system/cf-module-system-biz/pom.xml
index 57ae5b75f..4ec052004 100644
--- a/cf-module-system/cf-module-system-biz/pom.xml
+++ b/cf-module-system/cf-module-system-biz/pom.xml
@@ -224,7 +224,10 @@
-
+
+ com.cf.imes
+ cf-spring-boot-starter-biz-pay
+
@@ -333,6 +336,10 @@
com.cf.imes
cf-spring-boot-starter-mq
+
+ com.cf.imes
+ cf-spring-boot-starter-biz-pay
+
diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/pay/PayController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/pay/PayController.java
new file mode 100644
index 000000000..78b010426
--- /dev/null
+++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/pay/PayController.java
@@ -0,0 +1,114 @@
+package com.cf.imes.module.system.controller.admin.pay;
+
+import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.hutool.core.lang.generator.SnowflakeGenerator;
+import cn.hutool.http.Method;
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.AlipayConfig;
+import com.alipay.api.DefaultAlipayClient;
+import com.alipay.api.domain.AlipayTradePagePayModel;
+import com.alipay.api.request.AlipayTradePagePayRequest;
+import com.alipay.api.response.AlipayTradePagePayResponse;
+import com.cf.imes.framework.common.pojo.CommonResult;
+import com.cf.imes.framework.pay.core.enums.order.PayOrderDisplayModeEnum;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+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.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.security.PermitAll;
+import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
+import java.util.Map;
+import java.util.Objects;
+
+import static cn.hutool.core.date.DatePattern.NORM_DATETIME_FORMATTER;
+import static com.cf.imes.framework.common.pojo.CommonResult.success;
+
+/**
+ * @author Gqr
+ * @since 2025/4/8 16:09
+ */
+//@Tag(name = "管理后台 - 应用注册信息")
+@RestController
+@RequestMapping("/system/pay")
+@Validated
+@Slf4j
+public class PayController {
+
+// @Resource
+// private SnowflakeIdWorker3rd snowflakeIdWorker3rd;
+
+ @GetMapping("")
+// @Operation(summary = "获得应用注册")
+// @Parameter(name = "id", description = "编号", required = true, example = "1024")
+// @PreAuthorize("@ss.hasPermission('system:application:query')")
+ @PermitAll
+ public CommonResult getApplication() throws AlipayApiException {
+ // 1.1 构建 AlipayTradePagePayModel 请求
+ AlipayTradePagePayModel model = new AlipayTradePagePayModel();
+ // ① 通用的参数
+ SnowflakeGenerator snowflakeGenerator = new SnowflakeGenerator();
+ String outTradeNo = snowflakeGenerator.next().toString();
+ model.setOutTradeNo(outTradeNo);
+ model.setSubject("产品名称");
+ model.setBody("描述");
+ model.setTotalAmount("0.11");
+ model.setTimeExpire(LocalDateTimeUtil.format(LocalDateTime.now().plus(100, ChronoUnit.SECONDS), NORM_DATETIME_FORMATTER));
+ model.setProductCode("FAST_INSTANT_TRADE_PAY"); // 销售产品码. 目前 PC 支付场景下仅支持 FAST_INSTANT_TRADE_PAY
+ // ② 个性化的参数
+ // 如果想弄更多个性化的参数,可参考 https://www.pingxx.com/api/支付渠道 extra 参数说明.html 的 alipay_pc_direct 部分进行拓展
+ model.setQrPayMode("1"); // 跳转模式 - 订单码,效果参见:https://help.pingxx.com/article/1137360/
+ // ③ 支付宝 PC 支付有两种展示模式:FORM、URL
+ String displayMode = PayOrderDisplayModeEnum.URL.getMode();
+
+ // 1.2 构建 AlipayTradePagePayRequest 请求
+ AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
+ request.setBizModel(model);
+ request.setNotifyUrl("https://chenfeng.tech:3345/admin-api/system/pay/order/" + outTradeNo);
+ request.setReturnUrl("");
+
+ // 2.1 执行请求
+ AlipayTradePagePayResponse response;
+ AlipayConfig alipayConfig = new AlipayConfig();
+ alipayConfig.setServerUrl("https://openapi-sandbox.dl.alipaydev.com/gateway.do");
+ alipayConfig.setFormat("json");
+ alipayConfig.setCharset("utf-8");
+ alipayConfig.setSignType("RSA2");
+ alipayConfig.setPrivateKey("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCzOXNjRYBHpsJ2WGm43QB4ktKY6m24xf0Mepn5iHPyHtvbBPQXa3lyG7Nztxwk+oL5jbxEj+QB6nNVL2anOJT9fzr96qEwNc9a+7RnOeGDVfWN/FRTEYw0oExzqLoiO1rZlEWUpFpFnhQkEcBco/SJEJAE9WOe9N8y2O5B4EU1ik5667u8fzyC+XukTj/NhIhqdQdN1Vr953rFI8eh3ToDYcnvLjq2yt6zLLbhSxhg6mvw7dapHTyPitqkm/OhgfcNjlfSuTAIj7KtgluFA2eZzWqwbJmeKCqv///6YQl8/sFpHDmVY39WN0hQwoEFTo/dcWChsrN1cH1cbooIWdQ7AgMBAAECggEAO1cjSFQjtBWXv11oq8eot0NNrUm5SHttXGtffcpbMWhcPPk35GU2UbywPvj6vZegNAZktoK56JR62VKXd3h5hDFTE+1Sr0axwBsk0STN8RFN+1P3i4V82ZPVnFnaPylN3EqGez+rj+9WFdc2zLWQaq1sMegZsvC60fgXcwJRh/cT7FKLJe3qxb2nJJB+d+6yEHKMgaHSICv3b7SpGuhJaq8O62iY1oDj/u9EKgLtU28kiAunvXHnby1F6T+Fq26wCn3Q0GnRKWAhGXElXGjAY8hzcR0RBGLuROJbW3oa1wXX1DOMnRiAaHaFXsj7TTkGc3sCyGOLb9RgVaR9jQ9fwQKBgQDmQLQRACspFJeL640mO7C42P2zeu9hcHPypOudkMZIXobvvwZkP7w6rIv9XbG8xah7P5kNbaM1KP3ke5pNHnrCiphEv8rbmHlfoSaNKSS/omLAAa/Xm0OqMUOgpHe3PFITsiE2SARIqZaQoaR8+UUkJsRnIyLuf43SoOG1FC9F2wKBgQDHQ/4He/V/IxuTac7O+qMM9lFu+uyhsc+bMecyylh0AoADmscg4l98Kcs+IS5QB1HYEYo1fNElJ1Rs8iREHm+iK3h4xKIrG6KhObTVnqfYlCz2MYiHDW252KOqPdyxpeEuMSpoIVdcsvDBb+yYCTOT/DfX16eRSyl2pSv7SkFpIQKBgQDih1PgyfaskvrKCPO0YtNp+OoZE2DBz53zYjgAq/e4KW++HYUPSflJDIspuW1tGFW69AYDRRNl8K9hhA15w/vou+w07zCIPYlkASrphEoIU52t47r5d2Lp5U/wkv7JAoqJoB22xsGYL2jXYIBxB9jzSUS/Z70tQcbpK6kDuxkLMwKBgGgEyz/W6qFyjzuVmTqcxa7Hilz3qb0CmBA4rarqy9/LSk4XZul4okWrf4gwQ//MwmGbTl17iaXucPjqMhpJFRc/wASzCMCeDXhCKm71AkNhnlLqKo3taaEBQPZmkqU9pV26lpuDBBrE4j7oEUaQTxdqKzCGR9flt4BS2rGz4o9hAoGAYPufk/GigoOzUhv8KS2Vm7syIEr0jLOM87AmoO5DQrKGLoy80Nvjr5XuAhTwB0UnFUuchyFimmew3Bbi3iTCjAUmC06w4KWcTbY2Lu4YQpZU7gkFViuAWLIuJgN2xmWaCoaiphbVqB/+Wew4gFVgGXF39AUJS4fiXAIj4QiWO/I=");
+ alipayConfig.setAlipayPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtNsXwyaUwihNYoDLXZbET+jroEDUk1DfarrbcMPZy/uIW423KSDwTQi9SPuR4EgwB4sHy/UFhLe95gk0LnhZeZ0ddTSxsZ/Ps5eHlwxV0CR1Xw5K+yMNKyXkSuKDx5pbIv+xUveWRlOqte9fZDOKfXMplEjKJS/CeosXyKyzKiO8bXuYSBv4+lt6RkgFdKjEPGE5AqtvqyGDN86CHe2zf0lJUWLUwb4nlWpoW/6SihhG9+MKUrnBGPI132lZWkmZz3MriKb6yGo4/7Ospm+oWZYGj7vzI+WX25mFONFzmLx8q8h3PnZfODr7uXenRbaVraj7LRAneVSKKi3sAzdonwIDAQAB");
+ alipayConfig.setAppId("9021000142647599");
+
+ DefaultAlipayClient client = new DefaultAlipayClient(alipayConfig);
+ if (Objects.equals(displayMode, PayOrderDisplayModeEnum.FORM.getMode())) {
+ response = client.pageExecute(request, Method.POST.name()); // 需要特殊使用 POST 请求
+ } else {
+ response = client.pageExecute(request, Method.GET.name());
+ }
+ System.out.println(1);
+ // 2.2 处理结果
+ if (!response.isSuccess()) {
+// return buildClosedPayOrderRespDTO(reqDTO, response);
+ }
+ return success(response.getBody());
+// PayOrderRespDTO.waitingOf(displayMode, response.getBody(),
+// reqDTO.getOutTradeNo(), response);
+// return success(true);
+ }
+
+
+ @PostMapping(value = "/order/{channelId}")
+// @Operation(summary = "支付渠道的统一【支付】回调")
+ @PermitAll
+ public String notifyOrder(@PathVariable("channelId") Long channelId,
+ @RequestParam(required = false) Map params,
+ @RequestBody(required = false) String body) {
+ log.info("[notifyOrder][channelId({}) 回调数据({}/{})]", channelId, params, body);
+ return "success";
+ }
+}
diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/application.yaml b/cf-module-system/cf-module-system-biz/src/main/resources/application.yaml
index ecb15034c..45b92e419 100644
--- a/cf-module-system/cf-module-system-biz/src/main/resources/application.yaml
+++ b/cf-module-system/cf-module-system-biz/src/main/resources/application.yaml
@@ -171,6 +171,7 @@ chenfeng:
- /admin-api/system/auth/login/sms/check
- /admin-api/system/token/check
- /rpc-api/**
+ - /admin-api/system/pay/**
#- /admin-api/system/**
#- /rpc-api/system/organ/valid # 防止递归。避免调用 /rpc-api/system/organ/valid 接口时,又去触发 /rpc-api/system/organ/valid 去校验
#- /rpc-api/system/organ/id-list # 获得组织列表的时候,无需传递组织编号