TRX 1 ano atrás
pai
commit
a9da8eda18

+ 43 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/paySetting/payConfig/LaKaLaCollectionConfigParam.java

@@ -0,0 +1,43 @@
+package com.zhongshu.card.client.model.paySetting.payConfig;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+
+/**
+ * 拉卡拉支付 参数
+ *
+ * @author TRX
+ * @date 2024/10/8
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class LaKaLaCollectionConfigParam implements Serializable {
+
+    @Schema(description = "项目oid")
+    private String projectOid;
+
+    // 接入方唯一编号(appid):OP00000003
+    private String appId;
+
+    // 证书序列号(serial_no):00dfba8194c41b84cf
+    private String serialNo;
+
+    // 国密4(SM4Key):uIj6CPg1GZAY10dXFfsEAQ==
+    private String sm4Key;
+
+    // 商户私钥地址,用于请求签名
+    private MultipartFile priKeyFile;
+
+    // 拉卡拉公钥证书地址,用于验签(测试证书为:lkl-apigw-v2.cer)
+    private MultipartFile lklCerFile;
+
+    // 拉卡拉支付平台证书地址2(用于拉卡拉通知验签,证书与lklCerPath)一致,测试证书为:lkl-apigw-v2.cer)
+    private MultipartFile lklNotifyCerFile;
+
+}

+ 4 - 2
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/paySetting/ProjectPaySettingController.java

@@ -7,12 +7,14 @@ import com.zhongshu.card.client.model.base.ProjectOidParam;
 import com.zhongshu.card.client.model.feign.ProjectWxPayParam;
 import com.github.microservice.net.ResultContent;
 import com.zhongshu.card.client.model.paySetting.payConfig.LaKaLaCollectionConfig;
+import com.zhongshu.card.client.model.paySetting.payConfig.LaKaLaCollectionConfigParam;
 import com.zhongshu.card.client.model.paySetting.paySetting.*;
 import com.zhongshu.card.client.type.DataState;
 import com.zhongshu.card.server.core.service.paySetting.ProjectPaySettingServiceImpl;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -48,8 +50,8 @@ public class ProjectPaySettingController {
 
     @ResourceAuth(value = "user", type = AuthType.User)
     @Operation(summary = "保存项目的拉卡拉支付设置", description = "保存项目的拉卡拉支付设置")
-    @RequestMapping(value = "saveLaKaLaConfig", method = {RequestMethod.POST})
-    public ResultContent saveLaKaLaConfig(@RequestBody LaKaLaCollectionConfig param) {
+    @RequestMapping(value = "saveLaKaLaConfig", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, method = RequestMethod.POST)
+    public ResultContent saveLaKaLaConfig(@RequestBody LaKaLaCollectionConfigParam param) {
         return projectPaySettingService.saveLaKaLaConfig(param);
     }
 

+ 2 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/projectAbout/CardController.java

@@ -221,7 +221,8 @@ public class CardController {
     @ResourceAuth(value = "user", type = AuthType.User)
     @RequestMapping(value = "importCard", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, method = RequestMethod.POST)
     @Operation(summary = "导入用户和卡片的关系", description = "导入用户和卡片的关系")
-    public ResultContent<ImportResultModel> importCard(HttpServletRequest request, HttpServletResponse response, @RequestPart("file") MultipartFile file,
+    public ResultContent<ImportResultModel> importCard(HttpServletRequest request, HttpServletResponse response,
+            @RequestPart("file") MultipartFile file,
             ProjectOidParam param1) throws IOException {
         if (file == null || file.isEmpty()) {
             return ResultContent.buildFail("文件不能为空");

+ 21 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/base/CommonService.java

@@ -1,8 +1,10 @@
 package com.zhongshu.card.server.core.service.base;
 
+import com.github.microservice.core.util.net.HttpClient;
 import com.mongodb.client.result.UpdateResult;
 import com.zhongshu.card.server.core.util.CommonUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.query.Criteria;
@@ -10,8 +12,10 @@ import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.data.mongodb.core.query.Update;
 import org.springframework.stereotype.Service;
 
+import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.InputStream;
 import java.util.Base64;
 import java.util.Map;
 
@@ -102,4 +106,21 @@ public class CommonService {
         return base64;
     }
 
+    public String getUrlFileBase64(String fileUrl) {
+        if (StringUtils.isEmpty(fileUrl)) {
+            return "";
+        }
+        String base64 = "";
+        try {
+            HttpClient httpClient = new HttpClient();
+            byte[] fileBytes = httpClient.get(fileUrl);
+//            InputStream input = new ByteArrayInputStream(fileBytes);
+            base64 = Base64.getEncoder().encodeToString(fileBytes);
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("getUrlFileBase64 {}", e.getMessage());
+        }
+        return base64;
+    }
+
 }

+ 26 - 3
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/paySetting/ProjectPaySettingServiceImpl.java

@@ -5,6 +5,7 @@ import com.github.microservice.net.ResultMessage;
 import com.github.microservice.types.payment.PaymentType;
 import com.github.microservice.net.ResultContent;
 import com.zhongshu.card.client.model.paySetting.payConfig.LaKaLaCollectionConfig;
+import com.zhongshu.card.client.model.paySetting.payConfig.LaKaLaCollectionConfigParam;
 import com.zhongshu.card.client.model.paySetting.paySetting.*;
 import com.zhongshu.card.client.type.DataState;
 import com.zhongshu.card.server.core.dao.org.OrganizationDao;
@@ -13,14 +14,17 @@ import com.zhongshu.card.server.core.domain.org.Organization;
 import com.zhongshu.card.server.core.domain.paySetting.PayChannelConfig;
 import com.zhongshu.card.server.core.domain.paySetting.ProjectPaySetting;
 import com.zhongshu.card.server.core.service.base.SuperService;
+import com.zhongshu.card.server.core.util.AesUtils;
 import com.zhongshu.card.server.core.util.BeanUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.mongodb.gridfs.GridFsTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.ArrayList;
+import java.util.Base64;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -82,9 +86,28 @@ public class ProjectPaySettingServiceImpl extends SuperService {
      * @param param
      * @return
      */
-    public ResultContent saveLaKaLaConfig(LaKaLaCollectionConfig param) {
-        //TODO 检查微信支付参数等
-        return saveProjectPaySetting(param.getProjectOid(), PaymentType.LakalaFrictionlessPay, param);
+    public ResultContent saveLaKaLaConfig(LaKaLaCollectionConfigParam param) {
+        //TODO 检查支付参数等
+        LaKaLaCollectionConfig laKaLaCollectionConfig = null;
+        ResultContent<LaKaLaCollectionConfig> resultContent = getLaKaLaConfig(param.getProjectOid());
+        if (resultContent.isSuccess()) {
+            laKaLaCollectionConfig = resultContent.getContent();
+        }
+        if (ObjectUtils.isEmpty(laKaLaCollectionConfig)) {
+            laKaLaCollectionConfig = new LaKaLaCollectionConfig();
+        }
+        BeanUtils.copyProperties(param, laKaLaCollectionConfig);
+
+        String priKeyBase64 = AesUtils.turnMultipartFileToBase64(param.getPriKeyFile());
+        laKaLaCollectionConfig.setPriKeyBase64(priKeyBase64);
+
+        String lklCerBase64 = AesUtils.turnMultipartFileToBase64(param.getLklCerFile());
+        laKaLaCollectionConfig.setLklCerBase64(lklCerBase64);
+
+        String lklNotifyCerBase64 = AesUtils.turnMultipartFileToBase64(param.getLklNotifyCerFile());
+        laKaLaCollectionConfig.setLklNotifyCerBase64(lklNotifyCerBase64);
+
+        return saveProjectPaySetting(param.getProjectOid(), PaymentType.LakalaFrictionlessPay, laKaLaCollectionConfig);
     }
 
     /**

+ 12 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/util/AesUtils.java

@@ -4,6 +4,7 @@ import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.crypto.Mac;
 import javax.crypto.spec.SecretKeySpec;
@@ -87,6 +88,17 @@ public class AesUtils {
         return str;
     }
 
+    public static String turnMultipartFileToBase64(MultipartFile file) {
+        if (file != null) {
+            try {
+                return Base64.getEncoder().encodeToString(file.getInputStream().readAllBytes());
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return "";
+    }
+
     public static PublicKey initializeSM3WithSM2PublicKey(String publicKeyStr) throws Exception {
         // 将字节转换为PublicKey
         Security.addProvider(new BouncyCastleProvider());