"use strict"; /** * CLD 办事处常量 * * @author EllisRan. * @date 2018/9/25 * @version */ const crypto = require("crypto"); const axios = require("axios"); const category = { // ANHUI: 2, GANSU: 3, GUANGDONG: 4, GUANGXI: 5, JIANGXI: 6, SICHUAN: 7, CHONGQING: 8, NEIMENG: 9, ZHEJIANG: 10, SHANDONG: 11, ZONGBU: 12, // YUNNAN: 13, // GUIZHOU: 14, // BEIJING: 15, // FUJIAN: 16, // HAINAN: 17, // HEBEI: 18, // HENAN: 19, // HEILONGJIANG: 20, // HUBEI: 21, // HUNAN: 22, // JILIN: 23, // JIANGSU: 24, // LIAONING: 25, // NINGXIA: 26 }; const categoryList = [ // {id: category.ANHUI, name: '安徽办'}, { id: category.GANSU, name: "甘肃办" }, { id: category.GUANGDONG, name: "广东办" }, { id: category.GUANGXI, name: "广西办" }, { id: category.JIANGXI, name: "江西办" }, { id: category.SICHUAN, name: "四川办" }, { id: category.CHONGQING, name: "重庆办" }, { id: category.NEIMENG, name: "内蒙办" }, { id: category.ZHEJIANG, name: "浙江办" }, { id: category.SHANDONG, name: "山东办" }, { id: category.ZONGBU, name: "总部" }, // {id: category.YUNNAN, name: '云南办'}, // {id: category.GUIZHOU, name: '贵州办'}, // {id: category.BEIJING, name: '北京办'}, // {id: category.FUJIAN, name: '福建办'}, // {id: category.HAINAN, name: '海南办'}, // {id: category.HEBEI, name: '河北办'}, // {id: category.HENAN, name: '河南办'}, // {id: category.HEILONGJIANG, name: '黑龙江办'}, // {id: category.HUBEI, name: '湖北办'}, // {id: category.HUNAN, name: '湖南办'}, // {id: category.JILIN, name: '吉林办'}, // {id: category.JIANGSU, name: '江苏办'}, // {id: category.LIAONING, name: '辽宁办'}, // {id: category.NINGXIA, name: '宁夏办'} ]; const SECRET_KEY = "iIxMzQxMTQxNzMyNyIsImNhdGVnb3J5IjoiXHU"; function generateSign(params, timestamp, nonce, secretKey = SECRET_KEY) { // 按字母顺序排序参数 const sortedKeys = Object.keys(params).sort(); // 拼接参数字符串:key1=value1&key2=value2&... const queryString = sortedKeys .map((key) => `${key}=${params[key]}`) .join("&"); // 添加 timestamp 和 nonce const stringToSign = `${queryString}×tamp=${timestamp}&nonce=${nonce}`; console.log("待签名字符串:", stringToSign); // 生成 HMAC-SHA256 签名 const sign = crypto .createHmac("sha256", secretKey) .update(stringToSign) .digest("hex"); return sign; } async function getCategoryList() { try { const timestamp = Math.floor(Date.now() / 1000).toString(); const nonce = crypto.randomBytes(16).toString("hex"); const params = {}; const sign = generateSign(params, timestamp, nonce); const response = await axios.get( "https://zhcld.com/external/building/department", { headers: { "X-Building-Timestamp": timestamp, "X-Building-Sign": sign, "X-Building-Nonce": nonce, }, }, ); return response.data.data || []; } catch (err) { console.error("getCategoryList error:", err); return []; } } export { category as default, categoryList as List, getCategoryList };