# -*- coding: utf-8 -*- # !/usr/bin/env python """ web.wechat3rd.views ~~~~~~~~~ """ import logging from django.http import HttpResponse from django.views.decorators.http import require_POST from typing import TYPE_CHECKING from apps.web.core.bridge.wechat import MyWeChatComponent, MyWeChatComponentClient from library.wechatpy.messages import ComponentVerifyTicketMessage, ComponentUnauthorizedMessage, \ ComponentAuthorizedMessage, ComponentUpdateAuthorizedMessage, ComponentUnknownMessage, TextMessage from library.wechatpy.messages import BaseMessage if TYPE_CHECKING: from django.core.handlers.wsgi import WSGIRequest logger = logging.getLogger(__name__) @require_POST def componentEvents(request): # type: (WSGIRequest)->HttpResponse try: component = MyWeChatComponent.instance() # type: MyWeChatComponent if not component: logger.error('not find correct component.') else: msgSignature = request.GET.get("msg_signature") timeStamp = request.GET.get("timestamp") nonce = request.GET.get("nonce") decrypt_msg = component.parse_message(request.body, msgSignature, timeStamp, nonce) if isinstance(decrypt_msg, ComponentVerifyTicketMessage): pass elif isinstance(decrypt_msg, ComponentUnauthorizedMessage): pass elif isinstance(decrypt_msg, ComponentAuthorizedMessage): pass elif isinstance(decrypt_msg, ComponentUpdateAuthorizedMessage): pass elif isinstance(decrypt_msg, ComponentUnknownMessage): pass except Exception as e: logger.exception(e) return HttpResponse('success') def authNotify(request): # type: (WSGIRequest)->HttpResponse try: component = MyWeChatComponent.instance() # type: MyWeChatComponent if not component: logger.error('not find correct component.') else: auth_code = request.GET.get('auth_code') component.do_auth(auth_code) except Exception as e: logger.exception(e) finally: return HttpResponse('success') def authorizerEvents(request, authorizer_appid): try: component = MyWeChatComponent.instance() # type: MyWeChatComponent if not component: logger.error('not find correct component.') else: msgSignature = request.GET.get("msg_signature") timeStamp = request.GET.get("timestamp") nonce = request.GET.get("nonce") message = component.parse_authorizer_message(request.body, msgSignature, timeStamp, nonce) # type: BaseMessage if isinstance(message, TextMessage): logger.debug('text message is: {}.'.format(str(message))) if message.content == 'TESTCOMPONENT_MSG_TYPE_TEXT': MyWeChatComponentClient(authorizer_appid, component).message.send_text( message.source, 'TESTCOMPONENT_MSG_TYPE_TEXT_callback') elif message.content == 'TEST': MyWeChatComponentClient(authorizer_appid, component).message.send_text( message.source, 'ECHO TEST') elif 'QUERY_AUTH_CODE' in message.content: auth_code = message.content.split(':')[1] component.do_auth(auth_code) MyWeChatComponentClient(authorizer_appid, component).message.send_text( message.source, '{}_from_api'.format(auth_code)) except Exception as e: logger.exception(e) return HttpResponse('')