更改签名

This commit is contained in:
panjj 2025-01-11 00:03:00 +08:00
parent 5cd4daddb4
commit 0fe181fdae
3 changed files with 65 additions and 33 deletions

View File

@ -1,17 +1,23 @@
package com.suisung.mall.common.utils; package com.suisung.mall.common.utils;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.suisung.mall.common.api.StateCode; import com.suisung.mall.common.api.StateCode;
import com.suisung.mall.common.exception.ApiException; import com.suisung.mall.common.exception.ApiException;
import org.apache.logging.log4j.util.Strings;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.*; import java.util.*;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; 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; 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);
}
} }

View File

@ -5107,8 +5107,8 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl<ShopProductBaseM
Integer pages = com.suisung.mall.shop.sixun.utils.CommonUtil.getPagesCount(total.intValue(), pageSize); Integer pages = com.suisung.mall.shop.sixun.utils.CommonUtil.getPagesCount(total.intValue(), pageSize);
int successCnt = 0; int successCnt = 0;
for (int i = 1; i <= pages; i++) { for (int pageNum = 1; pageNum <= pages; pageNum++) {
List<SxSyncGoods> goodsList = sxSyncGoodsService.pageByStoreId(storeId, CommonConstant.Disable2, i, pageSize).getRecords(); List<SxSyncGoods> goodsList = sxSyncGoodsService.pageByStoreId(storeId, CommonConstant.Disable2, pageNum, pageSize).getRecords();
if (CollectionUtil.isEmpty(goodsList)) { if (CollectionUtil.isEmpty(goodsList)) {
continue; continue;
} }
@ -5189,7 +5189,7 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl<ShopProductBaseM
shopProductInfo.setProduct_number(sxSyncGoods.getItem_no());// SPU商家编码:货号 shopProductInfo.setProduct_number(sxSyncGoods.getItem_no());// SPU商家编码:货号
shopProductInfo.setProduct_assist(""); shopProductInfo.setProduct_assist("");
shopProductInfo.setProduct_spec(""); shopProductInfo.setProduct_spec("");
shopProductInfo.setProduct_buy_limit(0); // 没人限购 shopProductInfo.setProduct_buy_limit(0); // 限购
//商品规格 //商品规格
shopProductInfo.setSpec_ids(""); shopProductInfo.setSpec_ids("");

View File

@ -21,6 +21,7 @@ import com.suisung.mall.common.exception.ApiException;
import com.suisung.mall.common.modules.store.ShopStoreSfOrder; import com.suisung.mall.common.modules.store.ShopStoreSfOrder;
import com.suisung.mall.common.pojo.req.*; import com.suisung.mall.common.pojo.req.*;
import com.suisung.mall.common.pojo.res.SFExpressApiRes; import com.suisung.mall.common.pojo.res.SFExpressApiRes;
import com.suisung.mall.common.utils.CommonUtil;
import com.suisung.mall.common.utils.I18nUtil; import com.suisung.mall.common.utils.I18nUtil;
import com.suisung.mall.common.utils.JsonUtil; import com.suisung.mall.common.utils.JsonUtil;
import com.suisung.mall.common.utils.SseEmitterUtil; import com.suisung.mall.common.utils.SseEmitterUtil;
@ -50,7 +51,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
private final static String sfExpressApiDomain = "https://openic.sf-express.com/open/api/external/"; private final static String sfExpressApiDomain = "https://openic.sf-express.com/open/api/external/";
private static final Logger logger = LoggerFactory.getLogger(SFExpressApiServiceImpl.class); private static final Logger logger = LoggerFactory.getLogger(SFExpressApiServiceImpl.class);
@Value("${sf-express.appid}") @Value("${sf-express.appid}")
private Long appId; private String appId;
@Value("${sf-express.appkey}") @Value("${sf-express.appkey}")
private String appKey; private String appKey;
@Value("${sf-express.dev_id}") @Value("${sf-express.dev_id}")
@ -657,29 +658,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
* @return * @return
*/ */
private String generateOpenSign(String postData) { private String generateOpenSign(String postData) {
try { return CommonUtil.generateOpenSign(postData, appId, appKey);
String sb = postData +
"&" + appId + "&" + appKey;
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] md5 = md.digest(sb.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 "";
}
} }
/** /**
@ -690,12 +669,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
* @return * @return
*/ */
private boolean checkOpenSign(String sign, String postData) { private boolean checkOpenSign(String sign, String postData) {
if (StrUtil.isBlank(sign) || StrUtil.isBlank(postData)) { return CommonUtil.checkOpenSign(sign, postData, appId, appKey);
return false;
}
String newSign = generateOpenSign(postData);
return sign.equals(newSign);
} }
private Map<String, Object> buildCommonParams() { private Map<String, Object> buildCommonParams() {