新增顺丰同城的业务代码

This commit is contained in:
Jack 2024-11-17 00:08:40 +08:00
parent ca349af446
commit 8336994c30
2 changed files with 93 additions and 0 deletions

View File

@ -0,0 +1,4 @@
package com.suisung.mall.shop.api.service;
public interface SFExpressApiService {
}

View File

@ -0,0 +1,89 @@
/*
* Copyright (c) 2024. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
* Vestibulum commodo. Ut rhoncus gravida arcu.
*/
package com.suisung.mall.shop.api.service.impl;
import cn.hutool.core.util.StrUtil;
import com.suisung.mall.shop.api.service.SFExpressApiService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.security.MessageDigest;
@Service
public class SFExpressApiServiceImpl implements SFExpressApiService {
private static Logger logger = LoggerFactory.getLogger(SFExpressApiServiceImpl.class);
@Value("${sf-express.appid}")
private Long appId;
@Value("${sf-express.appkey}")
private String appKey;
/**
* 生成顺丰同城请求签名参考官网https://commit-openic.sf-express.com/#/apidoc
*
* @param postData
* @param appId
* @param appKey
* @return
*/
private String generateOpenSign(String postData, Long appId, String appKey) {
try {
StringBuilder sb = new StringBuilder();
sb.append(postData);
sb.append("&" + appId + "&" + appKey);
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] md5 = md.digest(sb.toString().getBytes("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 buf.toString();
} catch (Exception e) {
logger.error(e.getMessage());
return "";
}
}
/**
* 验证签名是否一致
*
* @param sign
* @param postData
* @param appId
* @param appKey
* @return
*/
private boolean checkOpenSign(String sign, String postData, Long appId, String appKey) {
if (StrUtil.isBlank(sign) || StrUtil.isBlank(postData) || StrUtil.isBlank(appKey) || appId == null || appId <= 0) {
return false;
}
String newSign = generateOpenSign(postData, appId, appKey);
if (sign.equals(newSign)) {
return true;
}
return false;
}
}