From a1245c1ed23e6f576d39e8828ad6b98d7cbc0df2 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Thu, 23 Jan 2025 15:33:25 +0800
Subject: [PATCH] refactor(unisoftiot): 删除无用的 API 相关代码- 移除了 Account、Device、Product 等实体类 - 删除了对应的 Mapper 接口和服务类 - 移除了 API 请求相关的工具类和枚举类
---
/dev/null | 160 -----------------------------------------------------
1 files changed, 0 insertions(+), 160 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/api/entity/Account.java b/src/main/java/cc/mrbird/febs/unisoftiot/api/entity/Account.java
deleted file mode 100644
index 8a9b5a1..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/api/entity/Account.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package cc.mrbird.febs.unisoftiot.api.entity;
-
-import lombok.Data;
-
-@Data
-public class Account {
-
- private String appId;
-
- private String appSecret;
-}
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/api/entity/Device.java b/src/main/java/cc/mrbird/febs/unisoftiot/api/entity/Device.java
deleted file mode 100644
index 823d648..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/api/entity/Device.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package cc.mrbird.febs.unisoftiot.api.entity;
-
-import lombok.Data;
-
-@Data
-public class Device {
-
- private String deviceId;
-}
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/api/entity/Product.java b/src/main/java/cc/mrbird/febs/unisoftiot/api/entity/Product.java
deleted file mode 100644
index 0713360..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/api/entity/Product.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package cc.mrbird.febs.unisoftiot.api.entity;
-
-import lombok.Data;
-
-/**
- * Product类代表一个产品实体,用于在平台中存储和管理产品相关信息
- * 它包含了产品的基本属性,如产品ID、型号、名称、图标、生产商、设备数量和备注
- */
-@Data
-public class Product {
- /**
- * 产品ID,平台唯一,固定不变
- */
- private int id;
- /**
- * 产品型号
- */
- private String model;
- /**
- * 产品名称
- */
- private String title;
- /**
- * 产品图标
- */
- private String icon;
- /**
- * 生产商,Unisoft或自定义
- */
- private String producer;
- /**
- * 工作台(控制台)下此产品类型的设备数量
- */
- private Integer device;
- /**
- * 备注
- */
- private String remark;
-}
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/api/mapper/AccountMapper.java b/src/main/java/cc/mrbird/febs/unisoftiot/api/mapper/AccountMapper.java
deleted file mode 100644
index fe5a8fd..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/api/mapper/AccountMapper.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package cc.mrbird.febs.unisoftiot.api.mapper;
-
-import cc.mrbird.febs.unisoftiot.api.entity.Account;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-public interface AccountMapper extends BaseMapper<Account> {
-}
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/api/mapper/DeviceMapper.java b/src/main/java/cc/mrbird/febs/unisoftiot/api/mapper/DeviceMapper.java
deleted file mode 100644
index c489e51..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/api/mapper/DeviceMapper.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package cc.mrbird.febs.unisoftiot.api.mapper;
-
-import cc.mrbird.febs.unisoftiot.api.entity.Device;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-public interface DeviceMapper extends BaseMapper<Device> {
-}
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/api/mapper/ProductMapper.java b/src/main/java/cc/mrbird/febs/unisoftiot/api/mapper/ProductMapper.java
deleted file mode 100644
index 1064e2e..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/api/mapper/ProductMapper.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package cc.mrbird.febs.unisoftiot.api.mapper;
-
-import cc.mrbird.febs.unisoftiot.api.entity.Product;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-public interface ProductMapper extends BaseMapper<Product> {
-}
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/api/service/DeviceService.java b/src/main/java/cc/mrbird/febs/unisoftiot/api/service/DeviceService.java
deleted file mode 100644
index 61ed61a..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/api/service/DeviceService.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package cc.mrbird.febs.unisoftiot.api.service;
-
-import cc.mrbird.febs.unisoftiot.api.entity.Device;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-public interface DeviceService extends IService<Device> {
-
- //控制设备,向设备下发指令
- String controlDevice(Device device);
-}
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/api/service/InitAccountService.java b/src/main/java/cc/mrbird/febs/unisoftiot/api/service/InitAccountService.java
deleted file mode 100644
index 78bb1b9..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/api/service/InitAccountService.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package cc.mrbird.febs.unisoftiot.api.service;
-
-import cc.mrbird.febs.unisoftiot.api.entity.Account;
-import cc.mrbird.febs.unisoftiot.config.UniSoftAccount;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-public interface InitAccountService extends IService<Account> {
-
- UniSoftAccount initAccount(Account account);
-
- UniSoftAccount initAccountByAppInfo(String appId, String appSecret);
-}
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/api/service/ProductService.java b/src/main/java/cc/mrbird/febs/unisoftiot/api/service/ProductService.java
deleted file mode 100644
index 56643e6..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/api/service/ProductService.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package cc.mrbird.febs.unisoftiot.api.service;
-
-import cc.mrbird.febs.unisoftiot.api.entity.Product;
-import cc.mrbird.febs.unisoftiot.api.vo.ApiProductVo;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-import java.util.List;
-
-public interface ProductService extends IService<Product> {
-
- /**
- * 获取产品列表
- */
- List<ApiProductVo> getProductList();
-}
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/api/service/impl/DeviceServiceImpl.java b/src/main/java/cc/mrbird/febs/unisoftiot/api/service/impl/DeviceServiceImpl.java
deleted file mode 100644
index d07bd5d..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/api/service/impl/DeviceServiceImpl.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package cc.mrbird.febs.unisoftiot.api.service.impl;
-
-import cc.mrbird.febs.unisoftiot.api.entity.Account;
-import cc.mrbird.febs.unisoftiot.api.entity.Device;
-import cc.mrbird.febs.unisoftiot.api.mapper.DeviceMapper;
-import cc.mrbird.febs.unisoftiot.api.service.DeviceService;
-import cc.mrbird.febs.unisoftiot.api.service.InitAccountService;
-import cc.mrbird.febs.unisoftiot.config.UniSoftAccount;
-import cc.mrbird.febs.unisoftiot.enums.DeviceRequestUrlEnum;
-import cc.mrbird.febs.unisoftiot.utils.UrlUtils;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-import java.util.LinkedHashMap;
-
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> implements DeviceService {
-
- private final InitAccountService initAccountService;
-
- /**
- * 控制设备的方法
- * 该方法用于向设备发送控制指令,例如开关设备等
- *
- * @param device 设备对象,包含设备的相关信息
- * @return 返回控制设备的结果,以字符串形式表示
- */
- @Override
- public String controlDevice(Device device) {
- // 初始化账户服务,为设备控制做准备
- UniSoftAccount uniSoftAccount = initAccountService.initAccountByAppInfo(UrlUtils.APP_ID,UrlUtils.APP_SECRET);
-
- // 创建参数集合,用于设备控制
- LinkedHashMap<String, Object> parameters = new LinkedHashMap<>();
- // 添加控制设备的参数,这里的例子是开启设备的某个功能
- parameters.put("device", "1438");
- parameters.put("power3", "1");
-
- log.info("parameters",parameters.toString());
-
- // 发送签名请求,控制设备
- // 这里使用了签名请求来确保设备控制指令的安全性
- return uniSoftAccount.requestHandler.sendSignedRequest(
- UrlUtils.BASE_URL,
- DeviceRequestUrlEnum.DEVICE_CONTROL.getRequestUrl(),
- parameters,
- DeviceRequestUrlEnum.DEVICE_CONTROL.getRequestMethod());
- }
-}
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/api/service/impl/InitAccountServiceImpl.java b/src/main/java/cc/mrbird/febs/unisoftiot/api/service/impl/InitAccountServiceImpl.java
deleted file mode 100644
index 47bd3ab..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/api/service/impl/InitAccountServiceImpl.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package cc.mrbird.febs.unisoftiot.api.service.impl;
-
-import cc.mrbird.febs.unisoftiot.api.service.InitAccountService;
-import cc.mrbird.febs.unisoftiot.api.entity.Account;
-import cc.mrbird.febs.unisoftiot.api.mapper.AccountMapper;
-import cc.mrbird.febs.unisoftiot.config.UniSoftAccount;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class InitAccountServiceImpl extends ServiceImpl<AccountMapper, Account> implements InitAccountService {
- @Override
- public UniSoftAccount initAccount(Account account) {
- return new UniSoftAccount(account.getAppId(),account.getAppSecret());
- }
-
- @Override
- public UniSoftAccount initAccountByAppInfo(String appId, String appSecret) {
- Account account = new Account();
- account.setAppId(appId);
- account.setAppSecret(appSecret);
- return this.initAccount(account);
- }
-}
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/api/service/impl/ProductServiceImpl.java b/src/main/java/cc/mrbird/febs/unisoftiot/api/service/impl/ProductServiceImpl.java
deleted file mode 100644
index e084c7c..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/api/service/impl/ProductServiceImpl.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package cc.mrbird.febs.unisoftiot.api.service.impl;
-
-import cc.mrbird.febs.unisoftiot.api.entity.Product;
-import cc.mrbird.febs.unisoftiot.api.mapper.ProductMapper;
-import cc.mrbird.febs.unisoftiot.api.service.InitAccountService;
-import cc.mrbird.febs.unisoftiot.api.service.ProductService;
-import cc.mrbird.febs.unisoftiot.api.vo.ApiProductVo;
-import cc.mrbird.febs.unisoftiot.config.UniSoftAccount;
-import cc.mrbird.febs.unisoftiot.enums.ProductRequestUrlEnum;
-import cc.mrbird.febs.unisoftiot.utils.UrlUtils;
-import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-import java.util.LinkedHashMap;
-import java.util.List;
-
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService {
-
- private final InitAccountService initAccountService;
- @Override
- public List<ApiProductVo> getProductList() {
- UniSoftAccount uniSoftAccount = initAccountService.initAccountByAppInfo(UrlUtils.APP_ID, UrlUtils.APP_SECRET);
-
- // 创建参数集合
- LinkedHashMap<String, Object> parameters = new LinkedHashMap<>();
- parameters.put("q", 1);
- String bodyStr = uniSoftAccount.requestHandler.sendSignedRequest(
- UrlUtils.BASE_URL, ProductRequestUrlEnum.PRODUCT_LIST.getRequestUrl(),
- parameters, ProductRequestUrlEnum.PRODUCT_LIST.getRequestMethod());
-
- JSONObject jsonObject = JSONUtil.parseObj(bodyStr);
- return jsonObject.getJSONArray("data").toList(ApiProductVo.class);
- }
-}
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/api/vo/ApiProductVo.java b/src/main/java/cc/mrbird/febs/unisoftiot/api/vo/ApiProductVo.java
deleted file mode 100644
index 6064ba1..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/api/vo/ApiProductVo.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package cc.mrbird.febs.unisoftiot.api.vo;
-
-import lombok.Data;
-
-@Data
-public class ApiProductVo {
- /**
- * 产品ID,平台唯一,固定不变
- */
- private int id;
- /**
- * 产品型号
- */
- private String model;
- /**
- * 产品名称
- */
- private String title;
- /**
- * 产品图标
- */
- private String icon;
- /**
- * 生产商,Unisoft或自定义
- */
- private String producer;
- /**
- * 工作台(控制台)下此产品类型的设备数量
- */
- private Integer device;
- /**
- * 备注
- */
- private String remark;
-}
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/config/RequestBuilder.java b/src/main/java/cc/mrbird/febs/unisoftiot/config/RequestBuilder.java
deleted file mode 100644
index b01c90e..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/config/RequestBuilder.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package cc.mrbird.febs.unisoftiot.config;
-
-import cc.mrbird.febs.common.exception.FebsException;
-import cc.mrbird.febs.unisoftiot.enums.HttpMethod;
-import okhttp3.MediaType;
-import okhttp3.Request;
-import okhttp3.RequestBody;
-
-/**
- * 请求构建器类,用于构建HTTP请求
- */
-public final class RequestBuilder {
-
- // 定义JSON类型的媒体类型常量
- private static final MediaType JSON_TYPE = MediaType.parse("application/json; charset=utf-8");
-
- // 私有构造方法,防止实例化
- private RequestBuilder() {
- }
-
- /**
- * 根据提供的参数构建HTTP请求
- *
- * @param fullUrl 完整的请求URL
- * @param body 请求体内容
- * @param httpMethod HTTP方法枚举类型
- * @return 构建好的Request对象
- * @throws FebsException 如果URL无效或HTTP方法不支持,则抛出此异常
- */
- public static Request buildRequest(String fullUrl, String body, HttpMethod httpMethod) {
- // 校验 URL
- if (fullUrl == null || fullUrl.isEmpty()) {
- throw new FebsException("Invalid URL: URL cannot be null or empty");
- }
-
- // 创建Request.Builder对象用于配置请求
- Request.Builder builder = new Request.Builder();
- try {
- // 根据HTTP方法构建不同的请求
- final Request request;
- switch (httpMethod) {
- case POST:
- // 构建POST请求,并设置请求体为JSON类型
- request = builder
- .url(fullUrl)
- .post(RequestBody.create(JSON_TYPE, body))
- .addHeader("X-APISpace-Token","")
- .addHeader("Content-Type","")
- .build();
- break;
- case GET:
- // 构建GET请求
- request = builder
- .url(fullUrl)
- .get()
- .addHeader("Content-Type", "application/x-www-form-urlencoded")
- .build();
- break;
- default:
- // 如果HTTP方法不支持,抛出异常
- throw new FebsException("Invalid HTTP method: " + httpMethod);
- }
- // 返回构建好的请求对象
- return request;
- } catch (IllegalArgumentException e) {
- // 如果URL格式错误,抛出异常
- throw new FebsException("Invalid URL: " + e.getMessage());
- }
- }
-
-
-}
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/config/RequestHandler.java b/src/main/java/cc/mrbird/febs/unisoftiot/config/RequestHandler.java
deleted file mode 100644
index b53356f..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/config/RequestHandler.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package cc.mrbird.febs.unisoftiot.config;
-
-import cc.mrbird.febs.common.exception.FebsException;
-import cc.mrbird.febs.unisoftiot.enums.HttpMethod;
-import cc.mrbird.febs.unisoftiot.utils.UrlUtils;
-import cn.hutool.json.JSONUtil;
-import com.alibaba.fastjson.JSON;
-import lombok.extern.slf4j.Slf4j;
-import okhttp3.Request;
-
-import java.util.LinkedHashMap;
-
-/**
- * 请求处理器类,用于构建和发送API请求
- */
-@Slf4j
-public class RequestHandler {
-
- private String appId;
- private String appSecret;
-
- /**
- * 构造函数,初始化appId和appSecret
- *
- * @param appId 应用ID
- * @param appSecret 应用密钥
- */
- public RequestHandler(String appId,String appSecret){
- this.appId = appId;
- this.appSecret = appSecret;
- }
-
- /**
- * 发送API请求
- *
- * @param baseUrl 基础URL
- * @param urlPath URL路径
- * @param parameters 请求参数
- * @param httpMethod HTTP方法
- * @return 请求结果字符串
- * @throws FebsException 当HTTP方法不支持时抛出异常
- */
- private String sendApiRequest(String baseUrl,
- String urlPath,
- LinkedHashMap<String, Object> parametersw,
- HttpMethod httpMethod) {
-
- // 创建参数集合,用于设备控制
- LinkedHashMap<String, Object> parameters = new LinkedHashMap<>();
- // 添加控制设备的参数,这里的例子是开启设备的某个功能
- parameters.put("device", "1438");
- parameters.put("power3", "1");
- log.info("parameters",parameters.toString());
- String fullUrl = "";
- Request request;
- // 根据HTTP方法构建请求
- switch (httpMethod) {
- case POST:
- // 对于POST请求,将参数序列化为JSON体
- fullUrl = UrlUtils.getUrl(baseUrl,appId,appSecret,urlPath,null);
- String body = JSON.toJSONString(parameters);
- log.info("parametersJson:", JSONUtil.parseObj(parameters));
- log.info("body:",body);
- request = RequestBuilder.buildRequest(fullUrl, body,httpMethod);
- break;
- case GET:
- // 对于GET请求,将参数直接拼接到URL中
- fullUrl = UrlUtils.getUrl(baseUrl,appId,appSecret,urlPath,parameters);
- request = RequestBuilder.buildRequest(fullUrl, null,httpMethod);
- break;
- default:
- // 不支持的HTTP方法抛出异常
- throw new FebsException("[RequestHandler] HttpMethod 不支持: " + httpMethod);
- }
-
- // 记录请求信息
- log.info("{} {}", httpMethod, fullUrl);
-
- // 发送请求并处理响应
- return ResponseHandler.handleResponse(request);
- }
-
- /**
- * 发送签名请求,确保appId和appSecret不为空
- *
- * @param baseUrl 基础URL
- * @param urlPath URL路径
- * @param parameters 请求参数
- * @param httpMethod HTTP方法
- * @return 请求结果字符串
- * @throws FebsException 当appId或appSecret为空时抛出异常
- */
- public String sendSignedRequest(String baseUrl,
- String urlPath,
- LinkedHashMap<String, Object> parameters,
- HttpMethod httpMethod) {
- // 校验appId和appSecret
- if (null == appId || appId.isEmpty() || null == appSecret || appSecret.isEmpty()) {
- throw new FebsException("[RequestHandler] appId/appSecret 不能为空!");
- }
- // 调用sendApiRequest方法发送请求
- return sendApiRequest(baseUrl, urlPath, parameters, httpMethod);
- }
-
-}
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/config/ResponseHandler.java b/src/main/java/cc/mrbird/febs/unisoftiot/config/ResponseHandler.java
deleted file mode 100644
index 8f71e63..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/config/ResponseHandler.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package cc.mrbird.febs.unisoftiot.config;
-
-import cc.mrbird.febs.common.exception.FebsException;
-import cc.mrbird.febs.unisoftiot.enums.ResponseCodeEnum;
-import cc.mrbird.febs.unisoftiot.utils.OkHttpUtils;
-import cn.hutool.core.util.StrUtil;
-import cn.hutool.json.JSONObject;
-import okhttp3.Request;
-import okhttp3.Response;
-import okhttp3.ResponseBody;
-import org.json.JSONException;
-
-import java.io.IOException;
-
-/**
- * 响应处理器类,用于处理OKHTTP请求的响应
- */
-public final class ResponseHandler {
-
- // 错误信息前缀
- private static final String ERROR_PREFIX = "[ResponseHandler] OKHTTP Error: ";
-
- // 私有构造方法,防止实例化
- private ResponseHandler() {
- }
-
- /**
- * 处理HTTP响应
- * @param request 请求对象
- * @return 响应体字符串
- * @throws FebsException 当响应处理失败时抛出
- */
- public static String handleResponse(Request request) {
- try (
- // 执行HTTP请求并获取响应
- Response response = OkHttpUtils.builder().okHttpClient.newCall(request).execute()
- ) {
- // 获取响应体内容
- String responseBodyStr = getResponseBodyAsString(response.body());
- if (ResponseCodeEnum.isFail(response.code())) {
- throw new FebsException(ERROR_PREFIX + responseBodyStr);
- }
- // 如果响应内容为空,则抛出异常
- if(StrUtil.isEmpty(responseBodyStr)){
- throw new FebsException(ERROR_PREFIX + "请求返回参数为空");
- }
- // 解析响应内容为JSON对象
- JSONObject jsonObject = new JSONObject(responseBodyStr);
- // 获取响应码
- int code = jsonObject.getInt("code");
- // 如果响应码表示失败,则处理错误响应
- if(ResponseCodeEnum.isFail(code)){
- throw handleErrorResponse(code, responseBodyStr);
- }
- // 获取响应消息
- String msg = jsonObject.getStr("msg");
- // 如果响应消息不正确,则抛出异常
- if(!ResponseCodeEnum.SUCCESS.getMsg().equals(msg)){
- throw new FebsException(ERROR_PREFIX + "请求返回参数msg不正确");
- }
- // 返回响应内容
- return responseBodyStr;
- } catch (IOException | IllegalStateException | JSONException e) {
- // 捕获异常并抛出自定义异常
- throw new FebsException(ERROR_PREFIX + e.getMessage());
- }
- }
-
- /**
- * 处理错误响应
- * @param code 响应码
- * @param responseBodyStr 响应体字符串
- * @return 自定义异常
- * @throws JSONException 当JSON解析失败时抛出
- */
- private static FebsException handleErrorResponse(int code, String responseBodyStr) {
- try {
- // 获取错误描述和消息
- String desc = ResponseCodeEnum.getDesc(code);
- String msg = ResponseCodeEnum.getMsg(code);
- // 构造并返回自定义异常
- return new FebsException(ERROR_PREFIX + "{" + msg + "},{" + desc + "}");
- } catch (JSONException e) {
- // 如果JSON解析失败,构造并返回自定义异常
- throw new FebsException(ERROR_PREFIX + "{" + responseBodyStr + "}");
- }
- }
-
- /**
- * 获取响应体内容作为字符串
- * @param body 响应体
- * @return 响应体字符串
- * @throws IOException 当读取响应体失败时抛出
- */
- private static String getResponseBodyAsString(ResponseBody body) throws IOException {
- if (body != null) {
- // 如果响应体不为空,读取并返回内容
- return body.string();
- } else {
- // 如果响应体为空,返回空字符串
- return "";
- }
- }
-}
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/config/UniSoftAccount.java b/src/main/java/cc/mrbird/febs/unisoftiot/config/UniSoftAccount.java
deleted file mode 100644
index 4a96e3d..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/config/UniSoftAccount.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package cc.mrbird.febs.unisoftiot.config;
-
-import lombok.Data;
-
-/**
- * 类说明:统一软账号配置类
- * 字段说明:
- * - appId: 应用ID,用于标识一个应用
- * - appSecret: 应用密钥,用于验证应用的身份
- * - requestHandler: 处理HTTP请求的处理器,用于封装HTTP请求的处理逻辑
- */
-@Data
-public class UniSoftAccount {
-
- private String appId;
-
- private String appSecret;
-
- // 处理HTTP请求的处理器
- public RequestHandler requestHandler;
-
- /**
- * 构造方法说明:初始化UniSoftAccount实例
- * 参数说明:
- * - appId: 应用ID,用于标识一个应用
- * - appSecret: 应用密钥,用于验证应用的身份
- * - requestHandler: 处理HTTP请求的处理器,用于封装HTTP请求的处理逻辑
- */
- public UniSoftAccount(String appId, String appSecret){
- this.appId = appId;
- this.appSecret = appSecret;
- this.requestHandler = new RequestHandler(appId, appSecret);
- }
-}
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/enums/DeviceRequestUrlEnum.java b/src/main/java/cc/mrbird/febs/unisoftiot/enums/DeviceRequestUrlEnum.java
deleted file mode 100644
index 1797772..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/enums/DeviceRequestUrlEnum.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package cc.mrbird.febs.unisoftiot.enums;
-
-import lombok.Getter;
-
-/**
- * 设备请求URL枚举类
- * 用于定义与设备相关的API请求的URL和方法
- */
-@Getter
-public enum DeviceRequestUrlEnum {
-
- /**
- * 设备控制请求配置
- * 使用POST方法发送设备控制指令
- */
- DEVICE_CONTROL(HttpMethod.POST,"/device/control"),
-
- /**
- * 设备分组请求配置
- * 使用POST方法对设备进行分组操作
- */
- DEVICE_GROUP(HttpMethod.POST,"/device/group"),
-
- /**
- * 设备标签请求配置
- * 使用POST方法添加或修改设备标签
- */
- DEVICE_TAG(HttpMethod.POST,"/device/tag"),
-
- /**
- * 设备列表请求配置
- * 使用POST方法获取设备列表
- */
- DEVICE_LIST(HttpMethod.POST,"/device/list"),
-
- /**
- * 设备信息请求配置
- * 使用POST方法获取特定设备的信息
- */
- DEVICE_INFO(HttpMethod.POST,"/device/info");
-
- // 请求方法,如POST、GET等
- private HttpMethod requestMethod;
-
- // 请求的URL路径
- private String requestUrl;
-
- /**
- * 构造函数,初始化设备请求的URL和方法
- *
- * @param requestMethod HTTP请求方法,例如POST
- * @param requestUrl HTTP请求的URL路径
- */
- DeviceRequestUrlEnum(HttpMethod requestMethod, String requestUrl) {
- this.requestMethod = requestMethod;
- this.requestUrl = requestUrl;
- }
-
-}
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/enums/HttpMethod.java b/src/main/java/cc/mrbird/febs/unisoftiot/enums/HttpMethod.java
deleted file mode 100644
index 82d53b4..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/enums/HttpMethod.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package cc.mrbird.febs.unisoftiot.enums;
-
-public enum HttpMethod {
- POST,
- GET,
- PUT,
- DELETE,
- INVALID
-}
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/enums/ProductRequestUrlEnum.java b/src/main/java/cc/mrbird/febs/unisoftiot/enums/ProductRequestUrlEnum.java
deleted file mode 100644
index d83a02e..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/enums/ProductRequestUrlEnum.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package cc.mrbird.febs.unisoftiot.enums;
-
-import lombok.Getter;
-
-@Getter
-public enum ProductRequestUrlEnum {
-
-
- PRODUCT_LIST(HttpMethod.POST,"/product/list");
-
- // 请求方法,如POST、GET等
- private HttpMethod requestMethod;
-
- // 请求的URL路径
- private String requestUrl;
-
- /**
- * 构造函数,初始化设备请求的URL和方法
- *
- * @param requestMethod HTTP请求方法,例如POST
- * @param requestUrl HTTP请求的URL路径
- */
- ProductRequestUrlEnum(HttpMethod requestMethod, String requestUrl) {
- this.requestMethod = requestMethod;
- this.requestUrl = requestUrl;
- }
-}
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/enums/ResponseCodeEnum.java b/src/main/java/cc/mrbird/febs/unisoftiot/enums/ResponseCodeEnum.java
deleted file mode 100644
index 953b036..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/enums/ResponseCodeEnum.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package cc.mrbird.febs.unisoftiot.enums;
-
-import lombok.Getter;
-
-/**
- * 响应码枚举类,用于定义API响应的各种状态码及其含义
- */
-@Getter
-public enum ResponseCodeEnum {
-
- // 定义各种错误响应码和成功响应码
- FAIL_5009(5009, "too many request", "单个设备访问最高限制1次/秒,请勿超过此限制"),
- FAIL_5008(5008, "ip:*.*.*.* is not in white list", "开启了IP检查,但接口访问IP不在白名单内,请在控制台的开发设置中,将IP加入白名单"),
- FAIL_5007(5007, "bad debug key", "指定了debug参数,但未开启调试模式,或者是debug参数不正确或已过期"),
- FAIL_5006(5006, "bad sign", "签名错误,正确签名为 md5(md5(开发者密码) + (url中的ts参数))"),
- FAIL_5005(5005, "please set app secret", "未设置开发者密码,请在控制台的开发设置中进行设置"),
- FAIL_5004(5004, "miss param sign", "请在请求接口中指定sign(签名),这是一个计算值"),
- FAIL_5003(5003, "bad ts", "时间戳错误,ts为请求发生时的时间,是一个动态的值,必须为中国时间"),
- FAIL_5002(5002, "miss param ts", "请在请求接口中指定ts(时间戳),取值为请求时的时间戳,10位数字"),
- FAIL_5001(5001, "miss app id", "请求地址为 https://iot-api.unisoft.cn/{APPID}/,缺少{APPID},请在控制台查看您的appid"),
- SUCCESS(200, "ok", "");
-
- // 响应码
- private int code;
- // 简短消息
- private String msg;
- // 描述信息
- private String desc;
-
- /**
- * 构造函数,初始化响应码、消息和描述
- *
- * @param code 响应码
- * @param msg 简短消息
- * @param desc 描述信息
- */
- ResponseCodeEnum(int code, String msg, String desc) {
- this.code = code;
- this.msg = msg;
- this.desc = desc;
- }
-
- /**
- * 根据响应代码获取描述信息
- * 该方法用于将系统内部的响应代码转换为人类可读的描述信息
- * 主要通过遍历枚举类ResponseCodeEnum来匹配传入的代码,并返回对应的描述
- * 如果没有找到匹配的代码,则返回空字符串
- *
- * @param code 响应代码,用于查找对应的描述信息
- * @return 描述信息如果找到匹配的代码,否则返回空字符串
- */
- public static String getDesc(int code) {
- for (ResponseCodeEnum item : ResponseCodeEnum.values()) {
- if (item.getCode() == code) {
- return item.getDesc();
- }
- }
- return "";
- }
-
- /**
- * 根据响应代码获取消息信息
- * 该方法用于将系统内部的响应代码转换为消息信息
- * 主要通过遍历枚举类ResponseCodeEnum来匹配传入的代码,并返回对应的消息
- * 如果没有找到匹配的代码,则返回空字符串
- *
- * @param code 响应代码,用于查找对应的消息信息
- * @return 消息信息如果找到匹配的代码,否则返回空字符串
- */
- public static String getMsg(int code) {
- for (ResponseCodeEnum item : ResponseCodeEnum.values()) {
- if (item.getCode() == code) {
- return item.getMsg();
- }
- }
- return "";
- }
- /**
- * 验证响应码是200
- */
- public static boolean isSuccess(int code) {
- return SUCCESS.getCode() == code;
- }
-
- /**
- * 验证响应码不是200
- */
- public static boolean isFail(int code) {
- return !isSuccess(code);
- }
-
-}
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/utils/JSONParser.java b/src/main/java/cc/mrbird/febs/unisoftiot/utils/JSONParser.java
deleted file mode 100644
index 49d066b..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/utils/JSONParser.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package cc.mrbird.febs.unisoftiot.utils;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-import java.util.ArrayList;
-
-public final class JSONParser {
-
- private JSONParser() {
- }
-
- public static String getJSONStringValue(String json, String key) {
- try {
- JSONObject obj = new JSONObject(json);
- return obj.getString(key);
- } catch (JSONException e) {
- throw new JSONException(String.format("[JSONParser] Failed to get \"%s\" from JSON object", key));
- }
- }
-
- public static int getJSONIntValue(String json, String key) {
- try {
- JSONObject obj = new JSONObject(json);
- return obj.getInt(key);
- } catch (JSONException e) {
- throw new JSONException(String.format("[JSONParser] Failed to get \"%s\" from JSON object", key));
- }
- }
-
- public static String getJSONArray(ArrayList<?> symbols, String key) {
- try {
- JSONArray arr = new JSONArray(symbols);
- return arr.toString();
- } catch (JSONException e) {
- throw new JSONException(String.format("[JSONParser] Failed to convert \"%s\" to JSON array", key));
- }
- }
-}
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/utils/OkHttpUtils.java b/src/main/java/cc/mrbird/febs/unisoftiot/utils/OkHttpUtils.java
deleted file mode 100644
index 39066ac..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/utils/OkHttpUtils.java
+++ /dev/null
@@ -1,330 +0,0 @@
-package cc.mrbird.febs.unisoftiot.utils;
-
-import lombok.extern.slf4j.Slf4j;
-import okhttp3.*;
-import org.json.JSONObject;
-
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSocketFactory;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-import java.io.IOException;
-import java.net.URLEncoder;
-import java.security.SecureRandom;
-import java.security.cert.X509Certificate;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.concurrent.Semaphore;
-import java.util.concurrent.TimeUnit;
-
-/**
- * OkHttp请求工具封装
- * 参考:https://blog.csdn.net/DwZ735660836/article/details/119976068
- */
-@Slf4j
-public class OkHttpUtils {
- public static volatile OkHttpClient okHttpClient = null;
- private static volatile Semaphore semaphore = null;
- private Map<String, String> headerMap;
- private Map<String, String> paramMap;
- private String url;
- private Request.Builder request;
- // 开发环境用的 ShadowsocksR-dotnet4.0 免费版本 正式环境得使用外网服务器
- // 安易代理 http://127.0.0.1:10809/ http://127.0.0.1:10808/
-
- /**
- * 初始化okHttpClient,并且允许https访问
- */
- private OkHttpUtils() {
- if (okHttpClient == null) {
- synchronized (OkHttpUtils.class) {
- if (okHttpClient == null) {
- TrustManager[] trustManagers = buildTrustManagers();
- okHttpClient = new OkHttpClient.Builder()
- .connectTimeout(30, TimeUnit.SECONDS)
- .writeTimeout(20, TimeUnit.SECONDS)
- .readTimeout(60, TimeUnit.SECONDS)
- .sslSocketFactory(createSSLSocketFactory(trustManagers), (X509TrustManager) trustManagers[0])
- //.hostnameVerifier((hostName, session) -> true)
- //配置自定义连接池参数
- .connectionPool(new ConnectionPool(5, 60, TimeUnit.SECONDS))
- .retryOnConnectionFailure(true)
- .build();
- addHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");
- addHeader("Connection", "close");
- addHeader("Accept-Encoding", "identity");
- }
- }
- }
- }
-
- /**
- * 用于异步请求时,控制访问线程数,返回结果
- *
- * @return
- */
- private static Semaphore getSemaphoreInstance() {
- //只能1个线程同时访问
- synchronized (OkHttpUtils.class) {
- if (semaphore == null) {
- semaphore = new Semaphore(0);
- }
- }
- return semaphore;
- }
-
- /**
- * 创建OkHttpUtils
- *
- * @return
- */
- public static OkHttpUtils builder() {
- return new OkHttpUtils();
- }
-
- /**
- * 添加url
- *
- * @param url
- * @return
- */
- public OkHttpUtils url(String url) {
- this.url = url;
- return this;
- }
-
- /**
- * 添加参数
- *
- * @param key 参数名
- * @param value 参数值
- * @return
- */
- public OkHttpUtils addParam(String key, String value) {
- if (paramMap == null) {
- paramMap = new LinkedHashMap<>(16);
- }
- paramMap.put(key, value);
- return this;
- }
-
- /**
- * 添加请求头
- *
- * @param key 参数名
- * @param value 参数值
- * @return
- */
- public OkHttpUtils addHeader(String key, String value) {
- if (headerMap == null) {
- headerMap = new LinkedHashMap<>(16);
- }
- headerMap.put(key, value);
- return this;
- }
-
- /**
- * 初始化get方法
- *
- * @return
- */
- public OkHttpUtils get() {
- request = new Request.Builder().get();
- StringBuilder urlBuilder = new StringBuilder(url);
- if (paramMap != null) {
- urlBuilder.append("?");
- try {
- for (Map.Entry<String, String> entry : paramMap.entrySet()) {
- urlBuilder.append(URLEncoder.encode(entry.getKey(), "utf-8")).
- append("=").
- append(URLEncoder.encode(entry.getValue(), "utf-8")).
- append("&");
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- urlBuilder.deleteCharAt(urlBuilder.length() - 1);
- }
- request.url(urlBuilder.toString());
- return this;
- }
-
- /**
- * 初始化post方法
- *
- * @param isJsonPost true等于json的方式提交数据,类似postman里post方法的raw
- * false等于普通的表单提交
- * @return
- */
- public OkHttpUtils post(boolean isJsonPost) {
- RequestBody requestBody;
- if (isJsonPost) {
- String json = "";
- if (paramMap != null) {
- json = JSONObject.valueToString(paramMap);
- }
- requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json);
- } else {
- FormBody.Builder formBody = new FormBody.Builder();
- if (paramMap != null) {
- paramMap.forEach(formBody::add);
- }
- requestBody = formBody.build();
- }
- request = new Request.Builder().post(requestBody).url(url);
- return this;
- }
-
- /**
- * 同步请求
- *
- * @return
- */
- public Request.Builder sync() {
- return setHeader(request);
- }
-
- /**
- * 同步请求
- *
- * @return
- */
- public String syncStr() {
- setHeader(request);
- try {
- Response response = okHttpClient.newCall(request.build()).execute();
- assert response.body() != null;
- return response.body().string();
- } catch (IOException e) {
- e.printStackTrace();
- return "请求失败:" + e.getMessage();
- }
- }
-
-
- /**
- * 异步请求,有返回值
- */
- public String async() {
- StringBuilder buffer = new StringBuilder("");
- setHeader(request);
- okHttpClient.newCall(request.build()).enqueue(new Callback() {
- @Override
- public void onFailure(Call call, IOException e) {
- buffer.append("请求出错:").append(e.getMessage());
- }
-
- @Override
- public void onResponse(Call call, Response response) throws IOException {
- assert response.body() != null;
- buffer.append(response.body().string());
- getSemaphoreInstance().release();
- }
- });
- try {
- getSemaphoreInstance().acquire();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- return buffer.toString();
- }
-
- /**
- * 异步请求,带有接口回调
- *
- * @param callBack
- */
- public void async(ICallBack callBack) {
- setHeader(request);
- okHttpClient.newCall(request.build()).enqueue(new Callback() {
- @Override
- public void onFailure(Call call, IOException e) {
- callBack.onFailure(call, e.getMessage());
- }
-
- @Override
- public void onResponse(Call call, Response response) throws IOException {
- assert response.body() != null;
- callBack.onSuccessful(call, response.body().string());
- }
- });
- }
-
- /**
- * 为request添加请求头
- *
- * @param request
- */
- private Request.Builder setHeader(Request.Builder request) {
- if (headerMap != null) {
- try {
- for (Map.Entry<String, String> entry : headerMap.entrySet()) {
- request.addHeader(entry.getKey(), entry.getValue());
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return request;
- }
-
-
- /**
- * 生成安全套接字工厂,用于https请求的证书跳过
- *
- * @return
- */
- private static SSLSocketFactory createSSLSocketFactory(TrustManager[] trustAllCerts) {
- SSLSocketFactory ssfFactory = null;
- try {
- SSLContext sc = SSLContext.getInstance("SSL");
- sc.init(null, trustAllCerts, new SecureRandom());
- ssfFactory = sc.getSocketFactory();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return ssfFactory;
- }
-
- private static TrustManager[] buildTrustManagers() {
- return new TrustManager[]{
- new X509TrustManager() {
- @Override
- public void checkClientTrusted(X509Certificate[] chain, String authType) {
- }
-
- @Override
- public void checkServerTrusted(X509Certificate[] chain, String authType) {
- }
-
- @Override
- public X509Certificate[] getAcceptedIssuers() {
- return new X509Certificate[]{};
- }
- }
- };
- }
-
- /**
- * 自定义一个接口回调
- */
- public interface ICallBack {
-
- void onSuccessful(Call call, String data);
-
- void onFailure(Call call, String errorMsg);
-
- }
-
- public static void main(String[] args) {
- String url = "https://api2.binance.com/api/v3/ticker/24hr?symbol=BNBUSDT&type=MINI";
- String result = OkHttpUtils.builder()
- .url(url)
- .addHeader("Content-Type", "application/x-www-form-urlencoded")
- .get()
- .syncStr();
- System.out.println(result);
- }
-}
-
-
diff --git a/src/main/java/cc/mrbird/febs/unisoftiot/utils/UrlUtils.java b/src/main/java/cc/mrbird/febs/unisoftiot/utils/UrlUtils.java
deleted file mode 100644
index 8601bcf..0000000
--- a/src/main/java/cc/mrbird/febs/unisoftiot/utils/UrlUtils.java
+++ /dev/null
@@ -1,160 +0,0 @@
-package cc.mrbird.febs.unisoftiot.utils;
-
-import cc.mrbird.febs.unisoftiot.enums.DeviceRequestUrlEnum;
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.crypto.SecureUtil;
-
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-/**
- * URL工具类,用于构造请求物联网控制台接口的URL
- */
-public class UrlUtils {
-
- /**
- * http(s)://iot-api.unisoft.cn/{AppID}/{接口列表中的path}/?{其他参数}&sign={sign}&ts={ts}
- *
- * sign 签名 所有请求物联网控制台接口,均需在url中携带此参数sign={sign}
- * 取值方法:md5(md5(开发者密码) + 上面的ts参数),32位字符串
- * ts 时间戳 所有请求物联网控制台接口,均需在url中携带此参数ts={timestap}
- * 取值方法:请求时间(timezone,东八区),10位数字
- */
- public static void main(String[] args) {
- System.out.println(getUrl(BASE_URL,APP_ID,APP_SECRET, DeviceRequestUrlEnum.DEVICE_CONTROL.getRequestUrl(), null));
- LinkedHashMap<String, Object> parameters = new LinkedHashMap<>();
- parameters.put("group", "123456789");
- parameters.put("product", "test");
- System.out.println(getUrl(BASE_URL,APP_ID,APP_SECRET,"device/info",parameters));
- }
- // todo 优化到后台配置中
- public static final String BASE_URL = " http://iot-api.unisoft.cn/rtyVWcgmlr";
- public static final String APP_ID = "rtyVWcgmlr";
- public static final String APP_SECRET = "rtyVWcgmlr";
- /**
- * 构造请求物联网控制台接口的URL
- *
- * @param baseUrl 基础URL地址
- * @param appId 应用ID,用于标识应用
- * @param appSecret 应用密钥,用于生成签名
- * @param requestPath 请求路径,标识具体的接口
- * @param parameters 请求参数,包含除sign和ts之外的其他参数
- * @return 返回构造完成的URL字符串
- *
- * 该方法首先会构建基础URL,然后添加appId和请求路径,接着添加其他参数,
- * 最后通过appSecret和时间戳生成签名(sign),以及添加时间戳(ts)到URL中。
- */
- public static String getUrl(String baseUrl,
- String appId,
- String appSecret,
- String requestPath,
- LinkedHashMap<String, Object> parameters){
- StringBuilder fullUrl = new StringBuilder(baseUrl);
-// fullUrl.append("/"+appId);
- fullUrl.append(requestPath);
- fullUrl.append("?");
- //判断parameters参数是否为空,不为空则拼接在fullUrl
- parametersSetToUrl(fullUrl,parameters);
- getSignAndTs(appSecret,fullUrl,parameters);
- return fullUrl.toString();
- }
-
- /**
- * 将查询参数附加到URL路径上
- * 此方法接受一个URL路径和一个查询参数的映射,然后将这些参数附加到URL路径上
- * 如果没有查询参数,URL路径保持不变
- *
- * @param urlPath URL路径的StringBuilder对象,用于构建最终的URL
- * @param parameters 查询参数的LinkedHashMap,键为参数名,值为参数值
- * @return 返回包含查询参数的URL路径的StringBuilder对象
- */
- public static StringBuilder parametersSetToUrl(StringBuilder urlPath, LinkedHashMap<String, Object> parameters) {
- // 检查参数是否为空,如果为空则直接返回URL路径
- if (parameters == null || parameters.isEmpty()) {
- return urlPath;
- }
- joinQueryParameters(urlPath, parameters);
- // 返回包含查询参数的URL路径
- return urlPath;
- }
-
- /**
- * 将查询参数拼接到URL路径后
- *
- * @param urlPath URL路径
- * @param parameters 查询参数
- * @return 拼接后的URL路径
- */
- public static StringBuilder joinQueryParameters(StringBuilder urlPath, LinkedHashMap<String, Object> parameters) {
- if (parameters == null || parameters.isEmpty()) {
- return urlPath;
- }
-
- boolean isFirst = true;
- for (Map.Entry<String, Object> mapElement : parameters.entrySet()) {
- Object value = mapElement.getValue();
- // 根据是否是第一个参数来决定是否添加&
- if (isFirst) {
- isFirst = false;
- } else {
- urlPath.append('&');
- }
-
- // 拼接参数到URL路径
- urlPath.append(mapElement.getKey())
- .append('=')
- .append(urlEncode(value.toString()));
- }
- return urlPath;
- }
-
- /**
- * 对URL参数进行编码
- *
- * @param s 参数字符串
- * @return 编码后的参数字符串
- */
- public static String urlEncode(String s) {
- try {
- return URLEncoder.encode(s, StandardCharsets.UTF_8.name());
- } catch (UnsupportedEncodingException e) {
- throw new RuntimeException(StandardCharsets.UTF_8.name() + " is unsupported", e);
- }
- }
-
-
-
- /**
- * 生成签名和时间戳参数
- * 该方法用于给定的URL路径添加签名(sign)和时间戳(ts)参数,以确保请求的安全性和有效性
- * 签名是通过将appSecret进行MD5加密,然后与当前时间戳拼接后再进行MD5加密生成
- * 这种方法确保了每个请求都有一个唯一的、基于时间的签名,从而防止了重放攻击
- *
- * @param appSecret 应用密钥,用于生成签名
- * @param urlPath StringBuilder对象,用于拼接URL路径和查询参数
- * @param parameters 请求参数,用于判断是否需要添加额外的连接符
- * @return 返回包含签名和时间戳参数的URL路径字符串
- */
- public static String getSignAndTs(String appSecret,StringBuilder urlPath, LinkedHashMap<String, Object> parameters) {
- //使用MD5加密appSecret
- String md5AppSecret = SecureUtil.md5(appSecret);
- //获取当前时间戳
- String timestamp = String.valueOf(DateUtil.currentSeconds());
- //生成sign参数,通过md5加密(appSecret的md5值 + 时间戳)
- String md5Sign = SecureUtil.md5(md5AppSecret + timestamp);
- //返回包含sign和ts参数的字符串
- if (CollUtil.isNotEmpty(parameters)) {
- urlPath.append("&");
- }
- urlPath.append("sign=");
- urlPath.append(md5Sign);
- urlPath.append("&ts=");
- urlPath.append(timestamp);
- return urlPath.toString();
- }
-
-}
--
Gitblit v1.9.1