views.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. """
  4. web.wechat3rd.views
  5. ~~~~~~~~~
  6. """
  7. import logging
  8. from django.http import HttpResponse
  9. from django.views.decorators.http import require_POST
  10. from typing import TYPE_CHECKING
  11. from apps.web.core.bridge.wechat import MyWeChatComponent, MyWeChatComponentClient
  12. from library.wechatpy.messages import ComponentVerifyTicketMessage, ComponentUnauthorizedMessage, \
  13. ComponentAuthorizedMessage, ComponentUpdateAuthorizedMessage, ComponentUnknownMessage, TextMessage
  14. from library.wechatpy.messages import BaseMessage
  15. if TYPE_CHECKING:
  16. from django.core.handlers.wsgi import WSGIRequest
  17. logger = logging.getLogger(__name__)
  18. @require_POST
  19. def componentEvents(request):
  20. # type: (WSGIRequest)->HttpResponse
  21. try:
  22. component = MyWeChatComponent.instance() # type: MyWeChatComponent
  23. if not component:
  24. logger.error('not find correct component.')
  25. else:
  26. msgSignature = request.GET.get("msg_signature")
  27. timeStamp = request.GET.get("timestamp")
  28. nonce = request.GET.get("nonce")
  29. decrypt_msg = component.parse_message(request.body, msgSignature, timeStamp, nonce)
  30. if isinstance(decrypt_msg, ComponentVerifyTicketMessage):
  31. pass
  32. elif isinstance(decrypt_msg, ComponentUnauthorizedMessage):
  33. pass
  34. elif isinstance(decrypt_msg, ComponentAuthorizedMessage):
  35. pass
  36. elif isinstance(decrypt_msg, ComponentUpdateAuthorizedMessage):
  37. pass
  38. elif isinstance(decrypt_msg, ComponentUnknownMessage):
  39. pass
  40. except Exception as e:
  41. logger.exception(e)
  42. return HttpResponse('success')
  43. def authNotify(request):
  44. # type: (WSGIRequest)->HttpResponse
  45. try:
  46. component = MyWeChatComponent.instance() # type: MyWeChatComponent
  47. if not component:
  48. logger.error('not find correct component.')
  49. else:
  50. auth_code = request.GET.get('auth_code')
  51. component.do_auth(auth_code)
  52. except Exception as e:
  53. logger.exception(e)
  54. finally:
  55. return HttpResponse('success')
  56. def authorizerEvents(request, authorizer_appid):
  57. try:
  58. component = MyWeChatComponent.instance() # type: MyWeChatComponent
  59. if not component:
  60. logger.error('not find correct component.')
  61. else:
  62. msgSignature = request.GET.get("msg_signature")
  63. timeStamp = request.GET.get("timestamp")
  64. nonce = request.GET.get("nonce")
  65. message = component.parse_authorizer_message(request.body, msgSignature, timeStamp,
  66. nonce) # type: BaseMessage
  67. if isinstance(message, TextMessage):
  68. logger.debug('text message is: {}.'.format(str(message)))
  69. if message.content == 'TESTCOMPONENT_MSG_TYPE_TEXT':
  70. MyWeChatComponentClient(authorizer_appid, component).message.send_text(
  71. message.source, 'TESTCOMPONENT_MSG_TYPE_TEXT_callback')
  72. elif message.content == 'TEST':
  73. MyWeChatComponentClient(authorizer_appid, component).message.send_text(
  74. message.source, 'ECHO TEST')
  75. elif 'QUERY_AUTH_CODE' in message.content:
  76. auth_code = message.content.split(':')[1]
  77. component.do_auth(auth_code)
  78. MyWeChatComponentClient(authorizer_appid, component).message.send_text(
  79. message.source, '{}_from_api'.format(auth_code))
  80. except Exception as e:
  81. logger.exception(e)
  82. return HttpResponse('')