WXTechObject.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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, LOGGER
  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. nonce = ''.join(str(random.choice(range(1, 10))) for _ in range(5))
  36. return {
  37. 'appkey': WX_TECH_APP_KEY,
  38. 'nonce': int(nonce),
  39. 'timestamp': int(time.time()),
  40. }
  41. @staticmethod
  42. def get_request_params(**params):
  43. """
  44. 将业务参数与系统参数合并后进行加签得到请求参数体
  45. """
  46. # 获取请求系统参数
  47. data = WXTechObject().get_system_params()
  48. # 系统参数与业务参数合并
  49. params = dict(data, **params)
  50. # 合并参数后进行升序加密得到sign
  51. sign = WXTechObject.getSign(TWX_TECH_SECRET, **params)
  52. params['sign'] = sign
  53. params = json.dumps(params)
  54. LOGGER.info('*****五兴API请求数据:{}'.format(params))
  55. return params
  56. def get_cards_info(self, **params):
  57. """
  58. 根据卡号,获取单卡信息及流量使用信息
  59. @param params: iccid、operator
  60. @return: 卡信息
  61. """
  62. url = WX_TECH_URL + '/api/v2/card/getCardsInfo'
  63. rq_body = self.get_request_params(**params)
  64. response = requests.post(url, data=rq_body, headers=self.headers)
  65. assert response.status_code == 200
  66. return UnicomObjeect().get_text_dict(response)
  67. def create_order_package(self, **params):
  68. """
  69. 卡片套餐订购,主套餐是立即生效,只有流量包可以顺延生效
  70. @param params: iccid、operator、startType、packageCode
  71. @return: 卡信息
  72. """
  73. url = WX_TECH_URL + '/api/v2/package/orderPackage'
  74. rq_body = self.get_request_params(**params)
  75. response = requests.post(url, data=rq_body, headers=self.headers)
  76. assert response.status_code == 200
  77. return UnicomObjeect().get_text_dict(response)
  78. if __name__ == '__main__':
  79. pass
  80. # data = {'iccid': '8986112128003439900', 'operator': 3}
  81. # print(WXTechObject().get_cards_info(**data))
  82. # data = {'iccid': '8986112128003439900', 'operator': 3}
  83. # print(WXTechObject().get_cards_info(**data))