mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-26 05:55:03 +08:00
update 对接第三方平台
This commit is contained in:
@@ -15,7 +15,7 @@ import com.jsowell.pile.dto.*;
|
||||
import com.jsowell.pile.dto.ningxiajiaotou.NXJTQueryStationInfoDTO;
|
||||
import com.jsowell.pile.service.*;
|
||||
import com.jsowell.pile.vo.web.PileModelInfoVO;
|
||||
import com.jsowell.thirdparty.lianlian.dto.CommonParamsDTO;
|
||||
import com.jsowell.pile.thirdparty.CommonParamsDTO;
|
||||
import com.jsowell.thirdparty.lianlian.util.Cryptos;
|
||||
import com.jsowell.thirdparty.lianlian.util.Encodes;
|
||||
import com.jsowell.thirdparty.lianlian.util.GBSignUtils;
|
||||
|
||||
@@ -3,12 +3,17 @@ package com.jsowell.thirdparty.platform;
|
||||
import cn.hutool.http.HttpUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.jsowell.common.util.DateUtils;
|
||||
import com.jsowell.common.util.JWTUtils;
|
||||
import com.jsowell.common.util.StringUtils;
|
||||
import com.jsowell.pile.dto.*;
|
||||
import com.jsowell.pile.dto.ningxiajiaotou.NXJTQueryStationInfoDTO;
|
||||
import com.jsowell.pile.thirdparty.CommonParamsDTO;
|
||||
import com.jsowell.thirdparty.lianlian.util.Cryptos;
|
||||
import com.jsowell.thirdparty.lianlian.util.Encodes;
|
||||
import com.jsowell.thirdparty.lianlian.util.GBSignUtils;
|
||||
import com.jsowell.thirdparty.lianlian.vo.AccessTokenVO;
|
||||
import com.jsowell.thirdparty.lianlian.vo.LianLianResultVO;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
@@ -18,6 +23,79 @@ import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public interface ThirdPartyPlatformService {
|
||||
|
||||
default Map<String, String> queryToken(CommonParamsDTO dto) {
|
||||
throw new UnsupportedOperationException("This method is not yet implemented");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 给第三方平台生成token
|
||||
*/
|
||||
default Map<String, String> generateToken(String operatorSecret, String dataSecret, String dataSecretIv,
|
||||
String signSecret, String operatorId, String data) {
|
||||
// 解密data
|
||||
byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(data), dataSecret.getBytes(), dataSecretIv.getBytes());
|
||||
String dataStr = new String(plainText, StandardCharsets.UTF_8);
|
||||
Map<String, String> resMap = (Map<String, String>) JSON.parse(dataStr);
|
||||
String secret = resMap.get("OperatorSecret");
|
||||
|
||||
// 对比解出来的密钥是否和数据库中保存的一致
|
||||
if (!StringUtils.equals(operatorSecret, secret)) {
|
||||
// System.out.println("密钥不一致");
|
||||
return null;
|
||||
}
|
||||
// System.out.println("密钥校验通过!! 密钥为: " + operatorSecret);
|
||||
|
||||
long ttlMillis = 60 * 60 * 24 * 1000;
|
||||
String token = JWTUtils.createToken(operatorId, operatorSecret, ttlMillis);
|
||||
// System.out.println("生成的token:" + token);
|
||||
|
||||
// 组装返回参数
|
||||
AccessTokenVO vo = new AccessTokenVO();
|
||||
vo.setAccessToken(token);
|
||||
vo.setOperatorID(operatorId);
|
||||
vo.setTokenAvailableTime((int) (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);
|
||||
|
||||
resultMap.put("Data", encryptData);
|
||||
// 生成sig
|
||||
String resultSign = GBSignUtils.sign(resultMap, signSecret);
|
||||
resultMap.put("Sig", resultSign);
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验签名
|
||||
* @param operatorID 组织机构代码
|
||||
* @param data 参数内容
|
||||
* @param timeStamp 时间戳
|
||||
* @param seq 自增序列
|
||||
* @param sig 数字签名
|
||||
* @param signSecret 签名密钥
|
||||
* @return 校验结果
|
||||
*/
|
||||
default boolean verifySignature(String operatorID, String data, String timeStamp, String seq, String sig, String signSecret) {
|
||||
Map<String, String> map = Maps.newLinkedHashMap();
|
||||
map.put("OperatorID", operatorID);
|
||||
map.put("Data", data);
|
||||
map.put("TimeStamp", timeStamp);
|
||||
map.put("Seq", seq);
|
||||
String sign = GBSignUtils.sign(map, signSecret);
|
||||
|
||||
// 验证签名 得到请求方传过来的签名sig->自己拿到请求体后,再按双方约定的协议生成一个sig->对比两个sig是否一致
|
||||
return StringUtils.equals(sig, sign);
|
||||
}
|
||||
|
||||
|
||||
// =================================================================================== //
|
||||
// ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 由我方平台实现此接口,对方平台调用的查询接口 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ //
|
||||
// =================================================================================== //
|
||||
@@ -369,4 +447,5 @@ public interface ThirdPartyPlatformService {
|
||||
return token;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -67,8 +67,8 @@ import java.util.stream.Collectors;
|
||||
* @Date 2024/1/18 10:05:23
|
||||
*/
|
||||
@Service
|
||||
public class HaiNanPlatformLogic implements ThirdPartyPlatformService {
|
||||
Logger logger = LoggerFactory.getLogger(HaiNanPlatformLogic.class);
|
||||
public class HaiNanPlatformServiceImpl implements ThirdPartyPlatformService {
|
||||
Logger logger = LoggerFactory.getLogger(HaiNanPlatformServiceImpl.class);
|
||||
// 平台类型
|
||||
private final String platformType = ThirdPlatformTypeEnum.HAI_NAN_1.getTypeCode();
|
||||
|
||||
@@ -20,6 +20,7 @@ import com.jsowell.common.util.StringUtils;
|
||||
import com.jsowell.pile.domain.*;
|
||||
import com.jsowell.pile.dto.QueryStationInfoDTO;
|
||||
import com.jsowell.pile.service.*;
|
||||
import com.jsowell.pile.thirdparty.CommonParamsDTO;
|
||||
import com.jsowell.pile.thirdparty.EquipmentInfo;
|
||||
import com.jsowell.pile.vo.base.*;
|
||||
import com.jsowell.pile.vo.lianlian.AccumulativeInfoVO;
|
||||
@@ -45,7 +46,7 @@ import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class LianLianPlatformLogic implements ThirdPartyPlatformService {
|
||||
public class LianLianPlatformServiceImpl implements ThirdPartyPlatformService {
|
||||
// 平台类型
|
||||
private final String platformType = ThirdPlatformTypeEnum.LIAN_LIAN_PLATFORM.getTypeCode();
|
||||
|
||||
@@ -82,6 +83,23 @@ public class LianLianPlatformLogic implements ThirdPartyPlatformService {
|
||||
// InterfaceWithPlatformLogicFactory.register(platformType, this);
|
||||
// }
|
||||
|
||||
@Override
|
||||
public Map<String, String> queryToken(CommonParamsDTO dto) {
|
||||
String operatorId = dto.getOperatorID();
|
||||
// 通过operatorId 查出 operatorSecret
|
||||
ThirdPartyPlatformConfig platformConfig = thirdPartyPlatformConfigService.getInfoByOperatorId(operatorId);
|
||||
if (platformConfig == null) {
|
||||
return null;
|
||||
}
|
||||
String operatorSecret = platformConfig.getOperatorSecret();
|
||||
String dataSecret = platformConfig.getDataSecret();
|
||||
String dataSecretIv = platformConfig.getDataSecretIv();
|
||||
String signSecret = platformConfig.getSignSecret();
|
||||
// 使用公共方法生成token
|
||||
Map<String, String> resultMap = generateToken(operatorSecret, dataSecret, dataSecretIv, signSecret, operatorId, dto.getData());
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询充电站信息 query_stations_info
|
||||
* 此接口用于查询对接平台的充电站的信息
|
||||
@@ -13,7 +13,7 @@ import java.util.Map;
|
||||
* 内蒙古监测平台逻辑
|
||||
*/
|
||||
@Service
|
||||
public class NeiMengGuPlatformLogic extends AbsInterfaceWithPlatformLogic {
|
||||
public class NeiMengGuPlatformServiceImpl extends AbsInterfaceWithPlatformLogic {
|
||||
// 平台类型
|
||||
private final String platformType = ThirdPlatformTypeEnum.NEI_MENG_GU_PLATFORM.getTypeCode();
|
||||
|
||||
Reference in New Issue
Block a user