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