WXTechObject.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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. return self.wx_service_api(url, **params)
  64. def create_order_package(self, **params):
  65. """
  66. 卡片套餐订购,主套餐是立即生效,只有流量包可以顺延生效
  67. @param params: iccid、operator、startType、packageCode
  68. @return: 卡信息
  69. """
  70. url = WX_TECH_URL + '/api/v2/package/orderPackage'
  71. return self.wx_service_api(url, **params)
  72. def package_refund(self, **params):
  73. """
  74. 根据套餐订购记录ID,退订套餐(不退款)
  75. @param params: operator、iccid、orderNumber
  76. @return:
  77. """
  78. url = WX_TECH_URL + '/api/v2/outputApi/packageRefund'
  79. return self.wx_service_api(url, **params)
  80. def delete_card_package(self, **params):
  81. """
  82. 清空卡片的所有套餐订购记录
  83. @param params: operator、iccids
  84. @return: 删除成功|失败
  85. """
  86. url = WX_TECH_URL + '/api/v2/outputApi/deleteCardPackage'
  87. return self.wx_service_api(url, **params)
  88. def wx_service_api(self, url, **params):
  89. """
  90. @param url 请求地址
  91. @param 业务必填参数
  92. 五兴业务API 统一封装加签请求
  93. """
  94. # 系统参数合并业务参数并加签得到请求参数
  95. rq_body = self.get_request_params(**params)
  96. response = requests.post(url, data=rq_body, headers=self.headers)
  97. assert response.status_code == 200
  98. return UnicomObjeect().get_text_dict(response)
  99. def get_package_order_record(self, **params):
  100. """
  101. 根据卡号,获取该卡片的套餐订购记录
  102. @param params: iccid、operator
  103. @return: 卡篇套餐订购记录
  104. """
  105. url = WX_TECH_URL + '/api/v2/package/packageOrderRecord'
  106. return self.wx_service_api(url, **params)
  107. if __name__ == '__main__':
  108. pass
  109. # data = {'iccid': '8986112128003439900', 'operator': 3}
  110. # print(WXTechObject().get_cards_info(**data))
  111. # data = {'iccid': '8986112128003439900', 'operator': 3}
  112. # print(WXTechObject().get_cards_info(**data))