simmanager.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import requests
  4. import simplejson as json
  5. import datetime
  6. from hashlib import md5
  7. from library.qiben.exceptions import QibenException
  8. API_URL = 'http://www.tibiot.cn/api/'
  9. class SimManager(object):
  10. def __init__(self, user = 'weifutong', password = 'yapaRxO3j0oz!evQ'):
  11. self.user = user
  12. self.password = password
  13. @property
  14. def time_key(self):
  15. return datetime.datetime.now().strftime("%Y%m%d%H%M%S")
  16. def encrypt_password(self, time_key):
  17. return md5('{}{}'.format(md5(self.password).hexdigest(), time_key)).hexdigest()
  18. def _get(self, endpoint, **kwargs):
  19. return self._request(
  20. method = 'get',
  21. endpoint = endpoint,
  22. **kwargs)
  23. def _post(self, endpoint, **kwargs):
  24. return self._request(
  25. method = 'post',
  26. endpoint = endpoint,
  27. **kwargs
  28. )
  29. def _decode_result(self, res):
  30. try:
  31. result = json.loads(res.content.decode('utf-8', 'ignore'), strict = False)
  32. except (TypeError, ValueError):
  33. return res
  34. return result
  35. def _handle_result(self, res, method = None, url = None,
  36. result_processor = None, **kwargs):
  37. if not isinstance(res, dict):
  38. result = self._decode_result(res)
  39. else:
  40. result = res
  41. return result if not result_processor else result_processor(result)
  42. def _request(self, method, endpoint, **kwargs):
  43. url = '{base}{endpoint}'.format(
  44. base = API_URL,
  45. endpoint = endpoint
  46. )
  47. headers = {'Content-Type': 'application/json;charset=utf-8'}
  48. if isinstance(kwargs.get('data', ''), dict):
  49. body = json.dumps(kwargs['data'], ensure_ascii = False)
  50. body = body.encode('utf-8')
  51. kwargs['data'] = body
  52. kwargs['timeout'] = kwargs.get('timeout', 5)
  53. result_processor = kwargs.pop('result_processor', None)
  54. with requests.sessions.Session() as session:
  55. res = session.request(
  56. url = url,
  57. method = method,
  58. headers = headers,
  59. **kwargs
  60. )
  61. res.raise_for_status()
  62. return self._handle_result(
  63. res, method, url, result_processor, **kwargs
  64. )
  65. def get_card_info(self, iccid):
  66. tkey = self.time_key
  67. end_point = 'v1/card/getCardInfo?username={}&password={}&tkey={}&iccid={}'.format(
  68. self.user, self.encrypt_password(tkey), tkey, iccid)
  69. result = self._get(endpoint = end_point)
  70. if result['status'] != 0:
  71. raise QibenException(result['status'], result['message'])
  72. return result['data']
  73. def get_card_list(self, begin_iccid, end_iccid, card_type = 1):
  74. tkey = self.time_key
  75. data = {
  76. 'userName': self.user,
  77. 'passWord': self.encrypt_password(tkey),
  78. 'tKey': tkey,
  79. 'cardType': card_type,
  80. 'pageNum': 1,
  81. 'pageSize': 100,
  82. 'iccid': '{}-{}'.format(begin_iccid, end_iccid)
  83. }
  84. result = self._post(endpoint = 'v1/card/batchQueryCardInfo', data = data)
  85. if 'status' not in result or result['status'] != 0:
  86. raise QibenException(result['status'], result['message'])
  87. return result['data']
  88. def get_pool_data(self, pool_id):
  89. tkey = self.time_key
  90. end_point = 'v1/getFlowPoolData?username={}&password={}&tkey={}&pool_id={}'.format(
  91. self.user, self.encrypt_password(tkey), tkey, pool_id)
  92. result = self._get(endpoint = end_point)
  93. if result['status'] != 0:
  94. raise QibenException(result['status'], result['message'])
  95. return result['data']
  96. def send_sms(self, iccid, content):
  97. tkey = self.time_key
  98. end_point = 'v1/card/sendSms?username={}&password={}&tkey={}&iccid={}&content={}'.format(
  99. self.user, self.encrypt_password(tkey), tkey, iccid, content)
  100. result = self._get(endpoint = end_point)
  101. if result['status'] != 0:
  102. raise QibenException(result['status'], result['message'])
  103. return result['data']