WXTechObject.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. # -*- encoding: utf-8 -*-
  2. """
  3. @File : WXTechObject.py
  4. @Time : 2023/5/6 15:28
  5. @Author : stephen
  6. @Email : zhangdongming@asj6.wecom.work
  7. @Software: PyCharm
  8. """
  9. import hashlib
  10. import json
  11. import random
  12. import time
  13. import requests
  14. from Ansjer.config import WX_TECH_URL, WX_TECH_APP_KEY, TWX_TECH_SECRET
  15. from Object.UnicomObject import UnicomObjeect
  16. class WXTechObject:
  17. def __init__(self):
  18. self.headers = {'content-type': 'application/json;charset=utf-8'}
  19. @staticmethod
  20. def getSign(secret, **data):
  21. dict_2 = dict(sorted(data.items(), key=lambda item: item[0], reverse=False))
  22. data_list = []
  23. for item in dict_2.items():
  24. if item[0] and item[1]:
  25. data_list.append("{}={}".format(item[0], item[1]))
  26. sign_param = '&'.join(data_list)
  27. push_key = '&secret={}'.format(secret)
  28. param = sign_param + push_key
  29. return hashlib.sha1(param.encode("utf-8")).hexdigest().upper()
  30. @staticmethod
  31. def get_system_params():
  32. """
  33. 请求接口必传系统参数
  34. """
  35. return {
  36. 'appkey': WX_TECH_APP_KEY,
  37. 'nonce': int(''.join(str(random.choice(range(10))) for _ in range(5))),
  38. 'timestamp': int(time.time()),
  39. }
  40. def get_cards_info(self, **params):
  41. """
  42. 根据卡号,获取单卡信息及流量使用信息
  43. @param params: iccid、operator
  44. @return: 卡信息
  45. """
  46. url = WX_TECH_URL + '/api/v2/card/getCardsInfo'
  47. # 系统参数
  48. data = WXTechObject().get_system_params()
  49. params = dict(data, **params)
  50. # 合并参数后进行升序加密得到sign
  51. sign = WXTechObject.getSign(TWX_TECH_SECRET, **params)
  52. params['sign'] = sign
  53. response = requests.post(url, data=json.dumps(params), headers=self.headers)
  54. return UnicomObjeect().get_text_dict(response)
  55. if __name__ == '__main__':
  56. pass
  57. # data = {'iccid': '8986112128003439900', 'operator': 3}
  58. # print(WXTechObject().get_cards_info(**data))