update 整理接口

This commit is contained in:
2024-03-27 14:46:20 +08:00
parent f45175f627
commit e770b121df
2 changed files with 75 additions and 69 deletions

View File

@@ -28,72 +28,6 @@ public interface ThirdPartyPlatformService {
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);
}
// =================================================================================== //
// ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 由我方平台实现此接口,对方平台调用的查询接口 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ //
@@ -446,4 +380,76 @@ public interface ThirdPartyPlatformService {
return token;
}
// =================================================================================== //
// ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 不同平台都可以使用的公共方法 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ //
// =================================================================================== //
/**
* 给第三方平台生成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);
}
}