瀏覽代碼

益寿缘-优化兔灵接口过滤带特殊字符的用户地址

cgp 4 周之前
父節點
當前提交
01a151e818

+ 13 - 10
fs-service/src/main/java/com/fs/erp/service/impl/TlErpOrderServiceImpl.java

@@ -54,10 +54,10 @@ public class TlErpOrderServiceImpl implements TlErpOrderService {
                 Map<String, Object> map = objectMapper.convertValue(item, Map.class);
                 dataAsMaps.add(map);
             }
-
+            //log.info("【dataAsMaps排序前: {}", dataAsMaps);
             long timestamp = Instant.now().getEpochSecond();
             String sortedDataJson = sortAndSerializeData(dataAsMaps);
-
+            //log.info("【sortedDataJson排序后: {}", sortedDataJson);
             String signSource = secretKey + corpId + sortedDataJson + timestamp;
             String sign = DigestUtils.md5Hex(signSource).toLowerCase();
 
@@ -160,22 +160,25 @@ public class TlErpOrderServiceImpl implements TlErpOrderService {
      */
     @SuppressWarnings("unchecked")
     private Object deepSort(Object obj) {
+        if (obj == null) {
+            return null;
+        }
         if (obj instanceof Map) {
             Map<String, Object> map = (Map<String, Object>) obj;
-            TreeMap<String, Object> sortedMap = new TreeMap<>();
-            for (Map.Entry<String, Object> entry : map.entrySet()) {
-                sortedMap.put(entry.getKey(), deepSort(entry.getValue()));
-            }
+            Map<String, Object> sortedMap = new LinkedHashMap<>();
+            map.entrySet().stream()
+                    .sorted(Map.Entry.comparingByKey())
+                    .forEach(entry -> sortedMap.put(entry.getKey(), deepSort(entry.getValue())));
             return sortedMap;
         } else if (obj instanceof List) {
             List<?> list = (List<?>) obj;
-            List<Object> sortedList = new ArrayList<>();
+            List<Object> newList = new ArrayList<>(list.size());
             for (Object item : list) {
-                sortedList.add(deepSort(item));
+                newList.add(deepSort(item));
             }
-            return sortedList;
+            return newList;
         } else {
-            return obj; // 基本类型、String、Number 等直接返回
+            return obj;
         }
     }
 

+ 11 - 1
fs-service/src/main/java/com/fs/erp/utils/TlOrderConverter.java

@@ -32,7 +32,7 @@ public class TlOrderConverter {
         item.setReceiverDistrict(shopOrder.getReceiverDistrict());
         //item.setReceiverTown(null); // 无对应字段
         item.setReceiverZip(shopOrder.getReceiverZip());
-        item.setReceiverAddress(shopOrder.getReceiverAddress());
+        item.setReceiverAddress(removeHtmlTags(shopOrder.getReceiverAddress()));
         item.setReceiverName(shopOrder.getReceiverName());
         item.setReceiverPhone(shopOrder.getReceiverPhone());
         //与联系电话字段二者必填一项
@@ -174,4 +174,14 @@ public class TlOrderConverter {
         return utcTime.format(DateTimeFormatter.ISO_INSTANT);
     }
 
+    /**
+     * (可选)彻底移除 < 和 > 特殊符号导致加密和MD5签名给兔灵失败
+     */
+    public static String removeHtmlTags(String input) {
+        if (input == null) {
+            return null;
+        }
+        return input.replace("<", "")
+                .replace(">", "");
+    }
 }