From 0fe181fdae7c421b41124b4b493be49ff94c1afc Mon Sep 17 00:00:00 2001 From: panjj <46790855@qq.com> Date: Sat, 11 Jan 2025 00:03:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E7=AD=BE=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../suisung/mall/common/utils/CommonUtil.java | 58 +++++++++++++++++++ .../impl/ShopProductBaseServiceImpl.java | 6 +- .../service/impl/SFExpressApiServiceImpl.java | 34 ++--------- 3 files changed, 65 insertions(+), 33 deletions(-) diff --git a/mall-common/src/main/java/com/suisung/mall/common/utils/CommonUtil.java b/mall-common/src/main/java/com/suisung/mall/common/utils/CommonUtil.java index 5bd36690..8dbe7bf3 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/utils/CommonUtil.java +++ b/mall-common/src/main/java/com/suisung/mall/common/utils/CommonUtil.java @@ -1,17 +1,23 @@ package com.suisung.mall.common.utils; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.suisung.mall.common.api.StateCode; import com.suisung.mall.common.exception.ApiException; +import org.apache.logging.log4j.util.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.math.BigDecimal; +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; import java.util.*; import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; +import org.apache.commons.codec.binary.Base64; +import org.springframework.util.StringUtils; /** * 常用工具方法 @@ -227,7 +233,59 @@ public class CommonUtil { return rtn; } + /** + * 生成 md 摘要通用签名(参考了顺丰同城的做法) + * 参考:https://openic.sf-express.com/#/quickstart + * @param postData + * @param appId + * @param appKey + * @return + */ + public static String generateOpenSign(String postData, String appId, String appKey) { + try { + if (StrUtil.isBlank(postData)|| StrUtil.isBlank(appId)|| StrUtil.isBlank(appKey)) { + logger.error("生成签名时缺少必要参数!"); + return Strings.EMPTY; + } + + StringBuilder sb = new StringBuilder(postData).append("&").append(appId).append("&").append(appKey); + MessageDigest md = MessageDigest.getInstance("MD5"); + byte[] md5 = md.digest(sb.toString().getBytes(StandardCharsets.UTF_8)); + int i; + StringBuffer buf = new StringBuffer(""); + for (byte b : md5) { + i = b; + if (i < 0) { + i += 256; + } + if (i < 16) { + buf.append("0"); + } + buf.append(Integer.toHexString(i)); + } + return Base64.encodeBase64String(buf.toString().getBytes(StandardCharsets.UTF_8)); + + } catch (Exception e) { + logger.error(e.getMessage()); + return Strings.EMPTY; + } + } + + public static boolean checkOpenSign(String sign, String postData, String appId, String appKey) { + if (StrUtil.isBlank(sign) || StrUtil.isBlank(postData)|| StrUtil.isBlank(appId)|| StrUtil.isBlank(appKey)) { + logger.error("验签时缺少必要参数!"); + return false; + } + + String sn = generateOpenSign(postData, appId, appKey); + if(StringUtils.isEmpty(sn)){ + logger.error("签名无效!"); + return false; + } + + return sign.equals(sn); + } } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductBaseServiceImpl.java index 7eb2aae7..ed06718f 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductBaseServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductBaseServiceImpl.java @@ -5107,8 +5107,8 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl goodsList = sxSyncGoodsService.pageByStoreId(storeId, CommonConstant.Disable2, i, pageSize).getRecords(); + for (int pageNum = 1; pageNum <= pages; pageNum++) { + List goodsList = sxSyncGoodsService.pageByStoreId(storeId, CommonConstant.Disable2, pageNum, pageSize).getRecords(); if (CollectionUtil.isEmpty(goodsList)) { continue; } @@ -5189,7 +5189,7 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl buildCommonParams() {