新增 青海平台配置信息

This commit is contained in:
Lemon
2024-04-22 11:29:28 +08:00
parent 01319e7648
commit 2c8c52f95b
5 changed files with 80 additions and 10 deletions

View File

@@ -32,7 +32,7 @@ import java.util.Map;
*/
@Anonymous
@RestController
@RequestMapping("/qinghai")
@RequestMapping("/qinghai/evcs")
public class QingHaiController extends BaseController {
@Autowired
@@ -74,6 +74,7 @@ public class QingHaiController extends BaseController {
// 校验失败
return CommonResult.failed("令牌校验错误");
}
// 查询配置信息
ThirdPartyPlatformConfig platformConfig = thirdPartyPlatformConfigService.getInfoByOperatorId(dto.getOperatorID());
String operatorSecret = platformConfig.getOperatorSecret();
@@ -81,6 +82,12 @@ public class QingHaiController extends BaseController {
String dataSecret = platformConfig.getDataSecret();
String dataSecretIV = platformConfig.getDataSecretIv();
// 校验签名
boolean verifyResult = qingHaiPlatformServiceImpl.verifySignature(dto, platformConfig.getSignSecret());
if (!verifyResult) {
// 验签失败
return CommonResult.failed("签名错误");
}
// 解密data
byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), dataSecret.getBytes(), dataSecretIV.getBytes());
String dataStr = new String(plainText, StandardCharsets.UTF_8);
@@ -116,6 +123,12 @@ public class QingHaiController extends BaseController {
String dataSecret = platformConfig.getDataSecret();
String dataSecretIV = platformConfig.getDataSecretIv();
// 校验签名
boolean verifyResult = qingHaiPlatformServiceImpl.verifySignature(dto, platformConfig.getSignSecret());
if (!verifyResult) {
// 验签失败
return CommonResult.failed("签名错误");
}
// 解密data
byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), dataSecret.getBytes(), dataSecretIV.getBytes());
String dataStr = new String(plainText, StandardCharsets.UTF_8);

View File

@@ -19,7 +19,7 @@ public enum ThirdPlatformTypeEnum {
HAI_NAN_2_PLATFORM("8", "海南一张网(充电平台)", "MAA9A0PP1"),
HUA_WEI("9", "华为平台", "MA5GTQ528"),
NEI_MENG_GU_PLATFORM("10", "内蒙古平台", ""),
QING_HAI_PLATFORM("11", "青海平台", ""),
QING_HAI_PLATFORM("11", "青海平台", "630000000"),
;
private String typeCode;

View File

@@ -255,8 +255,8 @@ public class LianLianServiceImpl implements LianLianService {
String dataSecret = "YPFVz1OvAS4nSwLW"; // SPBNJ1Z5EQNmpK08 VTAEKDPVN9CUS7WO huawei: zd4NrLWJ38XCTaqP E6gnWuz0QzBW75CR 正式NHsBDtTanA60vTIu pJahbxk8wG79CMDB
String dataSecretIV = "5tLoP60aR9QUB5Mx"; // peRoTcb2C7zqKeII 83UZFFRRZDYNF5CR huawei: RJJecvNTJ48SGMG7 SXejaSUx5yud8UHm 正式2uyE2Cgu4nVf6egc y259VRq7h8RyFXmT
String signSecret = "sRjCDeokckFGpYpA"; // sRjCDeokckFGpYpA
String dataString = "5TCGlD23wkxgJDWft077y212tE2U5XyR6iMpVesNoIiNiPG6n1sRKSDss\n" +
"QcezP+Zfzl1GnHbyTu7tm3IRvYoOg==";
String dataString = "XGsQOWT30eM0JPCGRkT6DQrmXQyvH+0klPcXN+kQ2vK5/7m5dTELoDjiT7AY9h8dCrjcRf7kx07\n" +
"5MitXO8CzoHerSke1nYGjtvGcL/zUMbs=";
// 解密data
byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), dataSecret.getBytes(), dataSecretIV.getBytes());

View File

@@ -485,16 +485,16 @@ public interface ThirdPartyPlatformService extends InitializingBean {
* @param signSecret 签名密钥
* @return 校验结果
*/
default boolean verifySignature(String operatorID, String data, String timeStamp, String seq, String sig, String signSecret) {
default boolean verifySignature(CommonParamsDTO dto, String signSecret) {
Map<String, String> map = Maps.newLinkedHashMap();
map.put("OperatorID", operatorID);
map.put("Data", data);
map.put("TimeStamp", timeStamp);
map.put("Seq", seq);
map.put("OperatorID", dto.getOperatorID());
map.put("Data", dto.getData());
map.put("TimeStamp", dto.getTimeStamp());
map.put("Seq", dto.getSeq());
String sign = GBSignUtils.sign(map, signSecret);
// 验证签名 得到请求方传过来的签名sig->自己拿到请求体后再按双方约定的协议生成一个sig->对比两个sig是否一致
return StringUtils.equals(sig, sign);
return StringUtils.equals(dto.getSig(), sign);
}

View File

@@ -12,6 +12,7 @@ import com.jsowell.common.enums.ykc.OrderStatusEnum;
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
import com.jsowell.common.exception.BusinessException;
import com.jsowell.common.util.DateUtils;
import com.jsowell.common.util.JWTUtils;
import com.jsowell.common.util.PageUtils;
import com.jsowell.common.util.StringUtils;
import com.jsowell.pile.domain.*;
@@ -20,6 +21,7 @@ import com.jsowell.pile.dto.QueryConnectorListDTO;
import com.jsowell.pile.dto.QueryStartChargeDTO;
import com.jsowell.pile.dto.QueryStationInfoDTO;
import com.jsowell.pile.service.*;
import com.jsowell.pile.thirdparty.CommonParamsDTO;
import com.jsowell.pile.thirdparty.ZDLEquipmentInfo;
import com.jsowell.pile.thirdparty.ZDLStationInfo;
import com.jsowell.pile.vo.base.ThirdPartyStationInfoVO;
@@ -30,6 +32,7 @@ import com.jsowell.pile.vo.web.PileConnectorInfoVO;
import com.jsowell.pile.vo.web.PileMerchantInfoVO;
import com.jsowell.pile.vo.zdl.EquipBusinessPolicyVO;
import com.jsowell.thirdparty.lianlian.domain.ConnectorStatusInfo;
import com.jsowell.thirdparty.lianlian.vo.AccessTokenVO;
import com.jsowell.thirdparty.platform.ThirdPartyPlatformService;
import com.jsowell.thirdparty.platform.common.ChargeOrderInfo;
import com.jsowell.thirdparty.platform.common.ConnectorChargeStatusInfo;
@@ -100,6 +103,60 @@ public class QingHaiPlatformServiceImpl implements ThirdPartyPlatformService {
System.out.println("当前类名:" + this.getClass().getSimpleName());
}
/**
* 请求令牌 query_token
* @param dto
* @return
*/
@Override
public Map<String, String> queryToken(CommonParamsDTO dto) {
String operatorId = dto.getOperatorID();
// 通过operatorId 查出 operatorSecret
ThirdPartyPlatformConfig platformConfig = thirdPartyPlatformConfigService.getInfoByOperatorId(operatorId);
if (platformConfig == null) {
throw new BusinessException("1", "无此对接平台");
}
String operatorSecret = platformConfig.getOperatorSecret();
String dataSecret = platformConfig.getDataSecret();
String dataSecretIv = platformConfig.getDataSecretIv();
String signSecret = platformConfig.getSignSecret();
// 解密data 获取参数中的OperatorSecret
try {
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("密钥不一致");
}
} 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();
// 加密数据
String encryptData = Cryptos.aesEncrypt(JSON.toJSONString(vo), dataSecret, dataSecretIv);
resultMap.put("Data", encryptData);
// 生成sig
String resultSign = GBSignUtils.sign(resultMap, signSecret);
resultMap.put("Sig", resultSign);
return resultMap;
}
/**
* 查询站点信息 query_stations_info
* @param dto 查询站点信息dto