category_const.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. "use strict";
  2. /**
  3. * CLD 办事处常量
  4. *
  5. * @author EllisRan.
  6. * @date 2018/9/25
  7. * @version
  8. */
  9. const crypto = require("crypto");
  10. const axios = require("axios");
  11. const category = {
  12. // ANHUI: 2,
  13. GANSU: 3,
  14. GUANGDONG: 4,
  15. GUANGXI: 5,
  16. JIANGXI: 6,
  17. SICHUAN: 7,
  18. CHONGQING: 8,
  19. NEIMENG: 9,
  20. ZHEJIANG: 10,
  21. SHANDONG: 11,
  22. ZONGBU: 12,
  23. // YUNNAN: 13,
  24. // GUIZHOU: 14,
  25. // BEIJING: 15,
  26. // FUJIAN: 16,
  27. // HAINAN: 17,
  28. // HEBEI: 18,
  29. // HENAN: 19,
  30. // HEILONGJIANG: 20,
  31. // HUBEI: 21,
  32. // HUNAN: 22,
  33. // JILIN: 23,
  34. // JIANGSU: 24,
  35. // LIAONING: 25,
  36. // NINGXIA: 26
  37. };
  38. const categoryList = [
  39. // {id: category.ANHUI, name: '安徽办'},
  40. { id: category.GANSU, name: "甘肃办" },
  41. { id: category.GUANGDONG, name: "广东办" },
  42. { id: category.GUANGXI, name: "广西办" },
  43. { id: category.JIANGXI, name: "江西办" },
  44. { id: category.SICHUAN, name: "四川办" },
  45. { id: category.CHONGQING, name: "重庆办" },
  46. { id: category.NEIMENG, name: "内蒙办" },
  47. { id: category.ZHEJIANG, name: "浙江办" },
  48. { id: category.SHANDONG, name: "山东办" },
  49. { id: category.ZONGBU, name: "总部" },
  50. // {id: category.YUNNAN, name: '云南办'},
  51. // {id: category.GUIZHOU, name: '贵州办'},
  52. // {id: category.BEIJING, name: '北京办'},
  53. // {id: category.FUJIAN, name: '福建办'},
  54. // {id: category.HAINAN, name: '海南办'},
  55. // {id: category.HEBEI, name: '河北办'},
  56. // {id: category.HENAN, name: '河南办'},
  57. // {id: category.HEILONGJIANG, name: '黑龙江办'},
  58. // {id: category.HUBEI, name: '湖北办'},
  59. // {id: category.HUNAN, name: '湖南办'},
  60. // {id: category.JILIN, name: '吉林办'},
  61. // {id: category.JIANGSU, name: '江苏办'},
  62. // {id: category.LIAONING, name: '辽宁办'},
  63. // {id: category.NINGXIA, name: '宁夏办'}
  64. ];
  65. const SECRET_KEY = "iIxMzQxMTQxNzMyNyIsImNhdGVnb3J5IjoiXHU";
  66. function generateSign(params, timestamp, nonce, secretKey = SECRET_KEY) {
  67. // 按字母顺序排序参数
  68. const sortedKeys = Object.keys(params).sort();
  69. // 拼接参数字符串:key1=value1&key2=value2&...
  70. const queryString = sortedKeys
  71. .map((key) => `${key}=${params[key]}`)
  72. .join("&");
  73. // 添加 timestamp 和 nonce
  74. const stringToSign = `${queryString}&timestamp=${timestamp}&nonce=${nonce}`;
  75. console.log("待签名字符串:", stringToSign);
  76. // 生成 HMAC-SHA256 签名
  77. const sign = crypto
  78. .createHmac("sha256", secretKey)
  79. .update(stringToSign)
  80. .digest("hex");
  81. return sign;
  82. }
  83. async function getCategoryList() {
  84. try {
  85. const timestamp = Math.floor(Date.now() / 1000).toString();
  86. const nonce = crypto.randomBytes(16).toString("hex");
  87. const params = {};
  88. const sign = generateSign(params, timestamp, nonce);
  89. const response = await axios.get(
  90. "https://zhcld.com/external/building/department",
  91. {
  92. headers: {
  93. "X-Building-Timestamp": timestamp,
  94. "X-Building-Sign": sign,
  95. "X-Building-Nonce": nonce,
  96. },
  97. },
  98. );
  99. return response.data.data || [];
  100. } catch (err) {
  101. console.error("getCategoryList error:", err);
  102. return [];
  103. }
  104. }
  105. export { category as default, categoryList as List, getCategoryList };