import requests from rest_framework import viewsets from rest_framework.decorators import action from rest_framework.response import Response from django.conf import settings from apps.jqr.parsers import WechatContentParser from apps.jqr.renderers import WechatPublicContentRenderer from apps.jqr.serializers import WechatPublicTokenSerializer, WechatEncryptSerializer from apps.qc.models import QcCorpinfo from utils.base_viewsets import BaseViewSet class WechatWorkerViewSet(viewsets.GenericViewSet): @action(methods=['GET'], detail=False, serializer_class=WechatPublicTokenSerializer, url_path=r'callback/(?P\w+)', ) def verify(self, request, path, *args, **kwargs): # if not settings.DEBUG: # params = request.query_params # # cbtest.xbtool.cn # url = f'https://46i859447w.yicp.fun/event/callback/{path}' # res = requests.get(url, params=params) # data = res.text # return Response(data=int(data)) [business, corpid, agentid, uid] = path.split('_') corp = QcCorpinfo.objects.get(corpid=corpid, agentid=agentid, uid=uid) context = self.get_serializer_context() context['corp'] = corp serializer = self.get_serializer(data=request.query_params, context=context) serializer.is_valid(raise_exception=True) enchostr = serializer.data.get('echostr') return Response(data=int(enchostr)) # return Response(data=enchostr) @verify.mapping.post def message(self, request, path, *args, **kwargs): # if not settings.DEBUG: # data = request.data # # cbtest.xbtool.cn # renderer = WechatPublicContentRenderer() # data = renderer.render(data) # url = f'https://46i859447w.yicp.fun/event/callback/{path}' # res = requests.post(url, data=data, headers={'Content-Type': 'text/xml'}) # return Response(data=res.json()) [business, corpid, agentid, uid] = path.split('_') corp = QcCorpinfo.objects.get(corpid=corpid, agentid=agentid, uid=uid) context = self.get_serializer_context() context['corp'] = corp serializer = WechatEncryptSerializer(data=request.data, context=context) serializer.is_valid(raise_exception=True) serializer.save() return Response(data=serializer.data) def get_parsers(self): if self.request.method == 'POST': return [WechatContentParser()] return super().get_parsers() def get_renderers(self): if self.request.method == 'POST': return [WechatPublicContentRenderer()] return super().get_renderers() class HookClientController(BaseViewSet): permission_classes = [] authentication_classes = [] @action(methods=['post'], detail=False, url_path='heartbeat') def heartbeat(self, request, *args, **kwargs): pass @action(methods=['post'], detail=False, url_path='pushmsg') def pushmsg(self, request, *args, **kwargs): pass