update 苏州市平台

This commit is contained in:
Lemon
2024-09-25 15:16:13 +08:00
parent ee84883a9c
commit ee9d2588b1
6 changed files with 133 additions and 54 deletions

View File

@@ -96,52 +96,46 @@ public class SuZhouPlatformServiceImpl implements ThirdPartyPlatformService {
*/
@Override
public Map<String, String> queryToken(CommonParamsDTO dto) {
AccessTokenVO vo = new AccessTokenVO();
// 0:成功1:失败
int succStat = 0;
// 0:无1:无此对接平台2:密钥错误; 399:自定义
int failReason = 0;
String operatorId = dto.getOperatorID();
// 通过operatorId 查出 operatorSecret
ThirdPartySecretInfoVO suZhouSecretInfo = getSuZhouSecretInfo();
String operatorSecret = suZhouSecretInfo.getOurOperatorSecret();
String dataSecret = suZhouSecretInfo.getOurDataSecret();
String dataSecretIv = suZhouSecretInfo.getOurDataSecretIv();
String signSecret = suZhouSecretInfo.getOurSigSecret();
// 解密data 获取参数中的OperatorSecret
try {
ThirdPartySecretInfoVO thirdPartySecretInfoVO = getSuZhouSecretInfo();
if (thirdPartySecretInfoVO == null) {
failReason = 1;
succStat = 1;
} else {
String ourOperatorSecret = thirdPartySecretInfoVO.getOurOperatorSecret();
String dataSecret = thirdPartySecretInfoVO.getOurDataSecret();
String dataSecretIv = thirdPartySecretInfoVO.getOurDataSecretIv();
// 解密data 获取参数中的OperatorSecret
String decrypt = Cryptos.decrypt(dto.getData(), dataSecret, dataSecretIv);
String inputOperatorSecret = null;
if (StringUtils.isNotBlank(decrypt)) {
inputOperatorSecret = JSON.parseObject(decrypt).getString("OperatorSecret");
}
if (!StringUtils.equals(operatorSecret, inputOperatorSecret)) {
throw new RuntimeException("密钥不一致");
// 对比密钥
if (!StringUtils.equals(ourOperatorSecret, inputOperatorSecret)) {
failReason = 1;
succStat = 1;
} else {
// 生成token
String token = JWTUtils.createToken(operatorId, ourOperatorSecret, JWTUtils.ttlMillis);
vo.setAccessToken(token);
vo.setTokenAvailableTime((int) (JWTUtils.ttlMillis / 1000));
}
} catch (RuntimeException e) {
throw new BusinessException("2", "密钥错误");
}
// 生成token
String token = JWTUtils.createToken(operatorId, operatorSecret, JWTUtils.ttlMillis);
// 组装返回参数
AccessTokenVO vo = new AccessTokenVO();
vo.setAccessToken(token);
vo.setOperatorID(operatorId);
vo.setTokenAvailableTime((int) (JWTUtils.ttlMillis / 1000));
vo.setFailReason(0);
vo.setSuccStat(0);
Map<String, String> resultMap = Maps.newLinkedHashMap();
// 加密数据
byte[] encryptText = Cryptos.aesEncrypt(JSON.toJSONString(vo).getBytes(),
dataSecret.getBytes(), dataSecretIv.getBytes());
String encryptData = Encodes.encodeBase64(encryptText); // data
resultMap.put("Ret", "0");
resultMap.put("Msg", "请求令牌成功!");
resultMap.put("Data", encryptData);
// 生成sig
String resultSign = GBSignUtils.sign(resultMap, signSecret);
resultMap.put("Sig", resultSign);
vo.setFailReason(failReason);
vo.setSuccStat(succStat);
Map<String, String> resultMap = ThirdPartyPlatformUtils.generateResultMapV2(vo, thirdPartySecretInfoVO.getOurDataSecret()
, thirdPartySecretInfoVO.getOurDataSecretIv(), thirdPartySecretInfoVO.getOurSigSecret());
return resultMap;
}
@@ -214,7 +208,8 @@ public class SuZhouPlatformServiceImpl implements ThirdPartyPlatformService {
map.put("PageCount", pageInfo.getPages());
map.put("ItemSize", pageInfo.getTotal());
map.put("StationInfos", resultList);
Map<String, String> resultMap = ThirdPartyPlatformUtils.generateResultMap(map, thirdPartySecretInfoVO);
Map<String, String> resultMap = ThirdPartyPlatformUtils.generateResultMapV2(map, thirdPartySecretInfoVO.getOurDataSecret()
, thirdPartySecretInfoVO.getOurDataSecretIv(), thirdPartySecretInfoVO.getOurSigSecret());
return resultMap;
}
@@ -324,7 +319,8 @@ public class SuZhouPlatformServiceImpl implements ThirdPartyPlatformService {
map.put("Total", total);
map.put("StationStatusInfos", collect);
Map<String, String> resultMap = ThirdPartyPlatformUtils.generateResultMap(map, thirdPartySecretInfoVO);
Map<String, String> resultMap = ThirdPartyPlatformUtils.generateResultMapV2(map, thirdPartySecretInfoVO.getOurDataSecret()
, thirdPartySecretInfoVO.getOurDataSecretIv(), thirdPartySecretInfoVO.getOurSigSecret());
return resultMap;
}
@@ -556,9 +552,8 @@ public class SuZhouPlatformServiceImpl implements ThirdPartyPlatformService {
// 调用联联平台接口
String url = urlAddress + BusinessInformationExchangeEnum.NOTIFICATION_STATION_INFO.getValue();
String jsonStr = JSON.toJSONString(info);
JSONObject data = new JSONObject();
data.put("StationInfo", jsonStr);
data.put("StationInfo", info);
String jsonString = JSON.toJSONString(data);

View File

@@ -8,6 +8,7 @@ import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.LinkedHashMap;
import java.util.Map;
public class GBSignUtils {
@@ -32,6 +33,57 @@ public class GBSignUtils {
}
}
/**
* 经过测试,此版本方法与上面方法得到的结果相同
* @param paramValues
* @param secret
* @return
*/
public static String signV2(Map<String, Object> paramValues, String secret) {
try {
StringBuilder sb = new StringBuilder();
for (Object value : paramValues.values()) {
if (StringUtils.isNotBlank((String) value)) {
sb.append(value);
}
}
logger.debug("需要签名的内容:{},密钥{}", sb.toString(), secret);
byte[] md5Digest = HmacMD5Encrypt(sb.toString(), secret);
String result = Encodes.encodeHex(md5Digest).toUpperCase();
logger.debug("HmacSHA1的签名内容{}", result);
return result;
} catch (Exception e) {
throw new RuntimeException("数据签名出错", e);
}
}
public static void main(String[] args) {
Map<String, String> paramValues = new LinkedHashMap<>();
paramValues.put("Ret", "0");
paramValues.put("Msg", "123456");
paramValues.put("Data", "123456888888");
StringBuilder sb = new StringBuilder();
for (String value : paramValues.values()) {
if (StringUtils.isNotBlank(value)) {
sb.append(value);
}
}
System.out.println(sb);
System.out.println("----------------------------------------");
Map<String, Object> paramValues1 = new LinkedHashMap<>();
paramValues1.put("Ret", 0);
paramValues1.put("Msg", "123456");
paramValues1.put("Data", "123456888888");
StringBuilder sb1 = new StringBuilder();
for (Object value : paramValues1.values()) {
if (StringUtils.isNotBlank(String.valueOf(value))) {
sb1.append(value);
}
}
System.out.println(sb1);
}
/**
* 使用 HMAC-MD5 签名方法对对encryptText进行签名
*

View File

@@ -54,6 +54,19 @@ public class ThirdPartyPlatformUtils {
return resultMap;
}
public static Map<String, String> generateResultMapV2(Object obj, String dataSecret, String dataSecretIv, String signSecret) {
Map<String, String> resultMap = Maps.newHashMap();
// 加密数据
String encryptData = Cryptos.aesEncrypt(JSON.toJSONString(obj), dataSecret, dataSecretIv);
resultMap.put("Ret", "0");
resultMap.put("Msg", "查询成功!");
resultMap.put("Data", encryptData);
// 生成sig
String resultSign = GBSignUtils.sign(resultMap, signSecret);
resultMap.put("Sig", resultSign);
return resultMap;
}
/**
* 从给定的URL字符串中提取充电桩枪口号。
*