exceptions.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. # -*- coding: utf-8 -*-
  2. """
  3. wechatpy.exceptions
  4. ~~~~~~~~~~~~~~~~~~~~
  5. Basic exceptions definition.
  6. :copyright: (c) 2014 by messense.
  7. :license: MIT, see LICENSE for more details.
  8. """
  9. from __future__ import absolute_import, unicode_literals
  10. import six
  11. from wechatpy.utils import to_binary, to_text
  12. class WeChatException(Exception):
  13. """Base exception for wechatpy"""
  14. def __init__(self, errcode, errmsg):
  15. """
  16. :param errcode: Error code
  17. :param errmsg: Error message
  18. """
  19. self.errcode = errcode
  20. self.errmsg = errmsg
  21. def __str__(self):
  22. _repr = 'Error code: {code}, message: {msg}'.format(
  23. code=self.errcode,
  24. msg=self.errmsg
  25. )
  26. if six.PY2:
  27. return to_binary(_repr)
  28. else:
  29. return to_text(_repr)
  30. def __repr__(self):
  31. _repr = '{klass}({code}, {msg})'.format(
  32. klass=self.__class__.__name__,
  33. code=self.errcode,
  34. msg=self.errmsg
  35. )
  36. if six.PY2:
  37. return to_binary(_repr)
  38. else:
  39. return to_text(_repr)
  40. class WeChatClientException(WeChatException):
  41. """WeChat API client exception class"""
  42. def __init__(self, errcode, errmsg, client=None,
  43. request=None, response=None):
  44. super(WeChatClientException, self).__init__(errcode, errmsg)
  45. self.client = client
  46. self.request = request
  47. self.response = response
  48. class InvalidSignatureException(WeChatException):
  49. """Invalid signature exception class"""
  50. def __init__(self, errcode=-40001, errmsg='Invalid signature'):
  51. super(InvalidSignatureException, self).__init__(errcode, errmsg)
  52. class APILimitedException(WeChatClientException):
  53. """WeChat API call limited exception class"""
  54. pass
  55. class InvalidAppIdException(WeChatException):
  56. """Invalid app_id exception class"""
  57. def __init__(self, errcode=-40005, errmsg='Invalid AppId'):
  58. super(InvalidAppIdException, self).__init__(errcode, errmsg)
  59. class WeChatOAuthException(WeChatClientException):
  60. """WeChat OAuth API exception class"""
  61. pass
  62. class WeChatComponentOAuthException(WeChatClientException):
  63. """WeChat Component OAuth API exception class"""
  64. pass
  65. class WeChatPayException(WeChatClientException):
  66. """WeChat Pay API exception class"""
  67. def __init__(self, return_code, result_code=None, return_msg=None,
  68. errcode=None, errmsg=None, client=None,
  69. request=None, response=None):
  70. """
  71. :param return_code: 返回状态码
  72. :param result_code: 业务结果
  73. :param return_msg: 返回信息
  74. :param errcode: 错误代码
  75. :param errmsg: 错误代码描述
  76. """
  77. super(WeChatPayException, self).__init__(
  78. errcode,
  79. errmsg,
  80. client,
  81. request,
  82. response
  83. )
  84. self.return_code = return_code
  85. self.result_code = result_code
  86. self.return_msg = return_msg
  87. def __str__(self):
  88. if six.PY2:
  89. return to_binary('Error code: {code}, message: {msg}. Pay Error code: {pay_code}, message: {pay_msg}'.format(
  90. code=self.return_code,
  91. msg=self.return_msg,
  92. pay_code=self.errcode,
  93. pay_msg=self.errmsg
  94. ))
  95. else:
  96. return to_text('Error code: {code}, message: {msg}. Pay Error code: {pay_code}, message: {pay_msg}'.format(
  97. code=self.return_code,
  98. msg=self.return_msg,
  99. pay_code=self.errcode,
  100. pay_msg=self.errmsg
  101. ))
  102. def __repr__(self):
  103. _repr = '{klass}({code}, {msg}). Pay({pay_code}, {pay_msg})'.format(
  104. klass=self.__class__.__name__,
  105. code=self.return_code,
  106. msg=self.return_msg,
  107. pay_code=self.errcode,
  108. pay_msg=self.errmsg
  109. )
  110. if six.PY2:
  111. return to_binary(_repr)
  112. else:
  113. return to_text(_repr)