Просмотр исходного кода

Merge remote-tracking branch 'origin/master'

yuhongqi 3 дней назад
Родитель
Сommit
ea6f6f888b

+ 11 - 0
fs-service/pom.xml

@@ -310,6 +310,17 @@
             <version>4.38.0.ALL</version>
         </dependency>
 
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcpkix-jdk15on</artifactId>
+            <version>1.70</version>
+        </dependency>
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcprov-jdk15on</artifactId>
+            <version>1.70</version>
+        </dependency>
+
 
     </dependencies>
 

+ 2 - 2
fs-service/src/main/java/com/fs/erp/utils/WeizouApiClient.java

@@ -171,8 +171,8 @@ public class WeizouApiClient {
                 .addHeader("token", token) // 假设使用Bearer Token
                 // TODO: 根据文档添加其他必要的Headers
                 .build();
-        log.info("订单推送请求参数打印:"+request);
-        log.info("订单推送请求体打印:"+orderData);
+//        log.info("订单推送请求参数打印:"+request);
+//        log.info("订单推送请求体打印:"+orderData);
 
         try (Response response = httpClient.newCall(request).execute()) {
             if (!response.isSuccessful()) {

+ 1 - 1
fs-service/src/main/java/com/fs/his/domain/FsIntegralOrderLogs.java

@@ -22,7 +22,7 @@ import java.time.LocalDateTime;
 public class FsIntegralOrderLogs{
 
     /** $column.columnComment */
-    private String logsId;
+    private Long logsId;
 
     /** 订单id */
     @Excel(name = "订单id")

+ 4 - 3
fs-service/src/main/java/com/fs/his/service/impl/FsStoreOrderServiceImpl.java

@@ -4720,6 +4720,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
         String s = WeizouApiClient.pushOrder(param);
         log.info("微走推送结果:{}",s);
     }
+    private static final int STATUS_INTEGRAL_PAYED = 1;
     private static final int STATUS_PENDING_SHIPMENT = 2;
     private static final int STATUS_SHIPPED = 3;
     private static final int STATUS_TO_EVALUATED = 4;
@@ -4807,7 +4808,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
         if (order instanceof FsStoreOrderScrm) {
             FsStoreOrderScrm o = (FsStoreOrderScrm) order;
             fsStoreOrder.setOrderId(o.getId());
-            if (o.getStatus() == STATUS_PENDING_SHIPMENT) {
+            if (o.getStatus() == STATUS_INTEGRAL_PAYED) {
                 executeShipOrderScrm(o, fsStoreOrder, opeName);
             } else {
                 updateDeliveryInfoScrm(o, fsStoreOrder, opeName);
@@ -4816,14 +4817,14 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
         }else{
             FsIntegralOrder o = (FsIntegralOrder) order;
             fsStoreOrder.setOrderId(o.getOrderId());
-            if (o.getStatus() == STATUS_PENDING_SHIPMENT) {
+            if (o.getStatus() == STATUS_INTEGRAL_PAYED) {
                 executeShipOrderIntegral(o, fsStoreOrder, opeName);
             } else {
                 updateDeliveryInfoIntegral(o, fsStoreOrder, opeName);
             }
 
         }
-        log.info("微走取消发货, 订单号: {}", fsStoreOrder.getOrderId());
+        log.info("微走发货, 订单号: {}", fsStoreOrder.getOrderId());
         return 1;
     }
 

+ 20 - 18
fs-service/src/main/java/com/fs/qw/utils/WeChatSpaceDecryptUtil.java

@@ -1,14 +1,16 @@
 package com.fs.qw.utils;
 
+import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
+import org.bouncycastle.openssl.PEMParser;
+import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
 import javax.crypto.Cipher;
+import java.io.StringReader;
 import java.nio.charset.StandardCharsets;
-import java.security.KeyFactory;
 import java.security.PrivateKey;
-import java.security.spec.PKCS8EncodedKeySpec;
 import java.util.Base64;
 
 @Component
@@ -16,12 +18,6 @@ public class WeChatSpaceDecryptUtil {
 
     private static final Logger log = LoggerFactory.getLogger(WeChatSpaceDecryptUtil.class);
 
-    /**
-     * 解密 encrypted_secret_key
-     * @param encryptedSecretKey Base64 编码的 RSA 密文
-     * @param privateKeyPem PEM 格式私钥字符串(含 -----BEGIN/END-----)
-     * @return 原始 AES 密钥字符串
-     */
     public static String decryptSecretKey(String encryptedSecretKey, String privateKeyPem) throws Exception {
         if (privateKeyPem == null || privateKeyPem.isEmpty()) {
             throw new IllegalArgumentException("私钥不能为空");
@@ -35,15 +31,21 @@ public class WeChatSpaceDecryptUtil {
     }
 
     private static PrivateKey parsePrivateKey(String privateKeyPem) throws Exception {
-        String privateKeyBase64 = privateKeyPem
-                .replace("-----BEGIN PRIVATE KEY-----", "")
-                .replace("-----END PRIVATE KEY-----", "")
-                .replace("-----BEGIN RSA PRIVATE KEY-----", "")
-                .replace("-----END RSA PRIVATE KEY-----", "")
-                .replaceAll("\\s", "");
-        byte[] keyBytes = Base64.getDecoder().decode(privateKeyBase64);
-        PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
-        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
-        return keyFactory.generatePrivate(spec);
+        try (PEMParser pemParser = new PEMParser(new StringReader(privateKeyPem))) {
+            Object object = pemParser.readObject();
+            PrivateKeyInfo privateKeyInfo = null;
+            if (object instanceof PrivateKeyInfo) {
+                privateKeyInfo = (PrivateKeyInfo) object;  // PKCS#8
+            } else if (object instanceof org.bouncycastle.openssl.PEMKeyPair) {
+                // PKCS#1 格式
+                org.bouncycastle.openssl.PEMKeyPair keyPair = (org.bouncycastle.openssl.PEMKeyPair) object;
+                privateKeyInfo = keyPair.getPrivateKeyInfo();
+            }
+            if (privateKeyInfo == null) {
+                throw new IllegalArgumentException("Unsupported private key format");
+            }
+            JcaPEMKeyConverter converter = new JcaPEMKeyConverter();
+            return converter.getPrivateKey(privateKeyInfo);
+        }
     }
 }

+ 11 - 0
fs-service/src/main/java/com/fs/qw/vo/QwSessionConfigVo.java

@@ -13,6 +13,9 @@ public class QwSessionConfigVo {
     //企业ID
     private String corpid;
 
+    //企业名称
+    private String corpName;
+
     //(关联专区程序的)自建应用ID
     private String agentid;
 
@@ -38,4 +41,12 @@ public class QwSessionConfigVo {
         private String key;   // 能力标识,例如 "invokeSyncMsg"
         private String value; // 能力具体ID,例如 "invoke_sync_msg"
     }
+
+    public String getPrivateKey() {
+        if (privateKey != null) {
+            // 将存储的转义换行符还原为真实换行
+            return privateKey.replace("\\n", "\n");
+        }
+        return null;
+    }
 }