Pārlūkot izejas kodu

feat: qcc utils

shc 1 gadu atpakaļ
vecāks
revīzija
eb560b9c58

+ 168 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/util/QccUtils.java

@@ -0,0 +1,168 @@
+package com.qunzhixinxi.hnqz.admin.util;
+
+import cn.hutool.core.text.CharSequenceUtil;
+import cn.hutool.crypto.digest.DigestUtil;
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.qunzhixinxi.hnqz.common.core.exception.BizException;
+import lombok.experimental.UtilityClass;
+
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 企查查工具类
+ *
+ * @author jimmy
+ * @date 07/07/2024 16:09
+ */
+@UtilityClass
+public class QccUtils {
+
+    private static final String API_KEY = "8476fff7305911eea3f10c42a106ce72";
+    private static final String SECRET_KEY = "CZMXHE8RQ59LWHFEHVM93HWPKF7GD7PM";
+
+    /**
+     * 获取企业工商信息详情
+     *
+     * @param searchKey 关键字
+     * @return 信息详情
+     */
+    public static JSONObject getECIInfo(String searchKey) {
+
+        String basePath = "https://pro.qcc.com/api/yj/ECIInfoVerify/GetInfo";
+
+        // 校验参数
+        checkSearchKey(searchKey);
+
+        // 执行
+        String result = execute(basePath, searchKey);
+
+        // 解析结果
+        return parseResult(result);
+
+    }
+
+    /**
+     * 执行
+     *
+     * @param url       地址
+     * @param searchKey 关键字
+     * @return 执行结果
+     */
+    private static String execute(String url, String searchKey) {
+        // 封装头
+        Map<String, String> headers = buildHeader();
+
+        // 封装参数
+        Map<String, Object> params = buildParams(searchKey);
+
+        // 发起请求
+        return exec(url, headers, params);
+    }
+
+    /**
+     * 构建头信息
+     *
+     * @return 头信息
+     */
+    private static Map<String, String> buildHeader() {
+
+        // 时间戳
+        String timespan = String.valueOf(LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")));
+
+        // 获取token
+        String token = getToken(timespan);
+
+        // 头信息
+        Map<String, String> headers = new HashMap<>(1);
+        headers.put("Token", token);
+        headers.put("Timespan", timespan);
+        return headers;
+    }
+
+    /**
+     * 请求
+     *
+     * @param basePath 路径
+     * @param header   头信息
+     * @param params   参数
+     * @return 请求结果
+     */
+    private static String exec(String basePath, Map<String, String> header, Map<String, Object> params) {
+        return HttpUtil.createGet(basePath).addHeaders(header).form(params).execute().body();
+    }
+
+    /**
+     * 构建参数
+     *
+     * @param searchKey 关键字
+     * @return 参数列表
+     */
+    private static Map<String, Object> buildParams(String searchKey) {
+        Map<String, Object> params = new HashMap<>(2);
+        params.put("searchKey", searchKey);
+        params.put("key", API_KEY);
+        return params;
+    }
+
+
+    /**
+     * 校验关键字
+     *
+     * @param searchKey 关键字
+     */
+    private void checkSearchKey(String searchKey) {
+        if (CharSequenceUtil.isBlank(searchKey)) {
+            throw new BizException("搜索关键字必填");
+        }
+    }
+
+    /**
+     * 获取token
+     *
+     * @param timespan 时间戳
+     * @return token
+     */
+    private String getToken(String timespan) {
+        String plainText = String.format("%s%s%s", API_KEY, timespan, SECRET_KEY);
+
+        String md5Hex1 = DigestUtil.md5Hex(plainText);
+
+        return md5Hex1.toUpperCase();
+    }
+
+
+    private static JSONObject parseResult(String result) {
+        boolean json = JSONUtil.isJson(result);
+
+        if (!json) {
+            throw new BizException("结果格式不是JSON不能解析");
+        }
+
+        return JSONUtil.parseObj(result);
+
+    }
+
+    private static boolean ok(JSONObject parsed) {
+        return "200".equals(getCode(parsed));
+    }
+
+    private static String getCode(JSONObject parsed) {
+        return parsed.getStr("Status");
+    }
+
+    private static JSONObject getResult(JSONObject parsed) {
+        return parsed.getJSONObject("Result");
+    }
+
+    private static String getMessage(JSONObject parsed) {
+        return String.format("%s,【Status】:%s", getCode(parsed), parsed.getStr("Message"));
+
+    }
+
+
+}