update 联联接口

This commit is contained in:
Lemon
2023-05-27 15:56:26 +08:00
parent 35413920d3
commit a87c35430f
5 changed files with 152 additions and 64 deletions

View File

@@ -6,7 +6,7 @@ import lombok.Setter;
@Getter
@Setter
public class QueryTokenDTO {
public class CommonParamsDTO {
@JsonProperty(value = "OperatorID")
private String operatorID;

View File

@@ -2,7 +2,7 @@ package com.jsowell.thirdparty.lianlian.service;
import com.jsowell.pile.dto.*;
import com.jsowell.thirdparty.lianlian.domain.StationStatsInfo;
import com.jsowell.thirdparty.lianlian.dto.QueryTokenDTO;
import com.jsowell.thirdparty.lianlian.dto.CommonParamsDTO;
import com.jsowell.thirdparty.lianlian.vo.*;
import java.io.UnsupportedEncodingException;
@@ -154,5 +154,17 @@ public interface LianLianService {
*/
String pushPileChargeStatusChange(String orderCode);
Map<String, String> generateToken(QueryTokenDTO dto) throws UnsupportedEncodingException;
/**
* 生成令牌
* @param dto
* @return
* @throws UnsupportedEncodingException
*/
Map<String, String> generateToken(CommonParamsDTO dto) throws UnsupportedEncodingException;
/**
* 校验签名
* @param dto
*/
Map<String, String> checkoutSign(CommonParamsDTO dto);
}

View File

@@ -36,7 +36,7 @@ import com.jsowell.pile.vo.web.PileConnectorInfoVO;
import com.jsowell.pile.vo.web.PileModelInfoVO;
import com.jsowell.pile.vo.web.PileStationVO;
import com.jsowell.thirdparty.lianlian.domain.*;
import com.jsowell.thirdparty.lianlian.dto.QueryTokenDTO;
import com.jsowell.thirdparty.lianlian.dto.CommonParamsDTO;
import com.jsowell.thirdparty.lianlian.service.LianLianService;
import com.jsowell.thirdparty.lianlian.util.Cryptos;
import com.jsowell.thirdparty.lianlian.util.Encodes;
@@ -1233,33 +1233,30 @@ public class LianLianServiceImpl implements LianLianService {
return result;
}
/**
* 生成令牌
* @param dto
* @return
* @throws UnsupportedEncodingException
*/
@Override
public Map<String, String> generateToken(QueryTokenDTO dto) throws UnsupportedEncodingException {
public Map<String, String> generateToken(CommonParamsDTO dto) throws UnsupportedEncodingException {
String operatorID = dto.getOperatorID();
// 通过operatorID 查出 operatorSecret TODO 建表 设置密钥
// 通过operatorID 查出 operatorSecret
DockingPlatformConfig platformConfig = dockingPlatformConfigService.getInfoByOperatorId(operatorID);
if (platformConfig == null) {
return null;
}
String operatorSecret = platformConfig.getOperatorSecret();
Map<String, String> map = Maps.newLinkedHashMap();
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, operatorSecret);
System.out.println(sign);
// 验证签名 得到请求方传过来的签名sig->自己拿到请求体后再按双方约定的协议生成一个sig->对比两个sig是否一致
if (!StringUtils.equals(dto.getSig(), sign)) {
System.out.println("签名校验==失败");
// 校验签名
Map<String, String> checkResultMap = checkoutSign(dto);
if (checkResultMap == null) {
// 校验失败
return null;
}
System.out.println("签名校验通过!!!");
String dataString = checkResultMap.get("Data");
// 解密data
byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dto.getData()), operatorSecret.getBytes(), operatorSecret.getBytes());
byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), operatorSecret.getBytes(), operatorSecret.getBytes());
String dataStr = new String(plainText, "UTF-8");
Map<String, String> resMap = (Map<String, String>) JSON.parse(dataStr);
String secret = resMap.get("OperatorSecret");
@@ -1285,19 +1282,59 @@ public class LianLianServiceImpl implements LianLianService {
vo.setSuccStat("0");
Map<String, String> resultMap = Maps.newLinkedHashMap();
// 加密数据 TODO vo对象加密
// 加密数据
byte[] encryptText = Cryptos.aesEncrypt(JSONObject.toJSONString(vo).getBytes(),
platformConfig.getDataSecret().getBytes(), platformConfig.getDataSecretIv().getBytes());
String encryptData = Encodes.encodeBase64(encryptText);
resultMap.put("Data", encryptData);
// 生成sig TODO 生成sig
// 生成sig
String resultSign = GBSignUtils.sign(resultMap, operatorSecret);
resultMap.put("Sig", resultSign);
return resultMap;
}
/**
* 校验签名并返回data(未解密)
* @param dto
*/
@Override
public Map<String, String> checkoutSign(CommonParamsDTO dto){
String operatorID = dto.getOperatorID();
// 通过operatorID 查出 operatorSecret
DockingPlatformConfig platformConfig = dockingPlatformConfigService.getInfoByOperatorId(operatorID);
if (platformConfig == null) {
return null;
}
String operatorSecret = platformConfig.getOperatorSecret();
Map<String, String> map = Maps.newLinkedHashMap();
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, operatorSecret);
System.out.println(sign);
// 验证签名 得到请求方传过来的签名sig->自己拿到请求体后再按双方约定的协议生成一个sig->对比两个sig是否一致
if (!StringUtils.equals(dto.getSig(), sign)) {
System.out.println("签名校验==失败");
return null;
}
System.out.println("签名校验通过!!!");
// 解密data
// byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dto.getData()), operatorSecret.getBytes(), operatorSecret.getBytes());
// String dataStr = new String(plainText, "UTF-8");
// Map<String, String> resMap = (Map<String, String>) JSON.parse(dataStr);
// return resMap;
Map<String, String> resultMap = new LinkedHashMap<>();
resultMap.put("Data", dto.getData());
resultMap.put("OperatorSecret", operatorSecret);
return resultMap;
}
/**
* TODO 请求打印充电小票
*/