qichacha.service.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { Config, Provide, InjectClient } from '@midwayjs/core';
  2. import * as CryptoJS from 'crypto-js';
  3. import dayjs = require('dayjs');
  4. import { HttpServiceFactory, HttpService } from '@midwayjs/axios';
  5. import { get } from 'lodash';
  6. import { ServiceError } from '../../error/service.error';
  7. /**
  8. * 企查查服务
  9. */
  10. @Provide()
  11. export class QichachaService {
  12. @Config('qichacha')
  13. qichacha: any;
  14. @InjectClient(HttpServiceFactory, 'default')
  15. axios: HttpService;
  16. getToken() {
  17. const { key, secretKey } = this.qichacha;
  18. const Timespan = dayjs().unix();
  19. const str = `${key}${Timespan}${secretKey}`;
  20. const token = CryptoJS.MD5(str).toString().toUpperCase();
  21. return { token, key, secretKey, Timespan, str };
  22. }
  23. /**
  24. * 通过企业名称模糊搜索匹配企业
  25. * https://openapi.qcc.com/dataApi/1027
  26. * @param {String} searchName 企业名称
  27. */
  28. async searchByName(searchName: string) {
  29. const info = this.getToken();
  30. const uri = ' https://api.qichacha.com/NameSearch/GetList';
  31. const url = `${uri}?key=${get(info, 'key')}&searchName=${searchName}`;
  32. const result = await this.axios.get(url, {
  33. headers: {
  34. Token: get(info, 'token'),
  35. Timespan: get(info, 'Timespan'),
  36. },
  37. });
  38. if (!result) return;
  39. const list = get(result, 'Data')
  40. return list;
  41. }
  42. analysisResponse(response) {
  43. const status = get(response, 'status');
  44. if (status !== 200) return;
  45. const result = get(response, 'data');
  46. const apiStatus = get(result, 'Status');
  47. if (status !== '200') return;
  48. return get(result, 'Result');
  49. }
  50. }