yzk_wechat_event/apps/jqr/views.py

124 lines
5.5 KiB
Python
Raw Normal View History

2023-12-21 14:46:34 +08:00
from datetime import datetime
2023-12-14 10:59:20 +08:00
import requests
2023-12-13 16:09:16 +08:00
from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.response import Response
2023-12-14 10:59:20 +08:00
from django.conf import settings
2023-12-13 16:09:16 +08:00
2023-12-21 14:46:34 +08:00
from apps.jqr.models import JqrHookUser, JqrExternalQun, JqrSendnewusermsgrecord, JqrSendmsgrecordinfo
2023-12-13 16:09:16 +08:00
from apps.jqr.parsers import WechatContentParser
from apps.jqr.renderers import WechatPublicContentRenderer
2023-12-21 14:46:34 +08:00
from apps.jqr.serializers import WechatPublicTokenSerializer, WechatEncryptSerializer, HeartBeatSerializer, \
TbMessageModelSerializer
2023-12-14 13:22:07 +08:00
from apps.qc.models import QcCorpinfo
from utils.base_viewsets import BaseViewSet
2023-12-21 14:46:34 +08:00
from utils.response import ApiResponse
2023-12-13 16:09:16 +08:00
class WechatWorkerViewSet(viewsets.GenericViewSet):
2023-12-14 13:22:07 +08:00
@action(methods=['GET'], detail=False, serializer_class=WechatPublicTokenSerializer,
url_path=r'callback/(?P<path>\w+)', )
2023-12-13 17:10:26 +08:00
def verify(self, request, path, *args, **kwargs):
2023-12-14 18:43:01 +08:00
# 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))
2023-12-14 13:22:07 +08:00
2023-12-13 17:10:26 +08:00
[business, corpid, agentid, uid] = path.split('_')
2023-12-14 13:22:07 +08:00
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)
2023-12-13 16:09:16 +08:00
serializer.is_valid(raise_exception=True)
enchostr = serializer.data.get('echostr')
return Response(data=int(enchostr))
2023-12-14 13:22:07 +08:00
# return Response(data=enchostr)
2023-12-13 16:09:16 +08:00
@verify.mapping.post
2023-12-14 14:04:40 +08:00
def message(self, request, path, *args, **kwargs):
2023-12-14 18:43:01 +08:00
# 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())
2023-12-14 14:42:38 +08:00
[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)
2023-12-13 16:09:16 +08:00
serializer.is_valid(raise_exception=True)
2023-12-14 15:29:55 +08:00
serializer.save()
2023-12-14 15:42:21 +08:00
return Response(data=serializer.data)
2023-12-13 16:09:16 +08:00
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 = []
2023-12-21 14:46:34 +08:00
serializer_class = {
'heartbeat': HeartBeatSerializer,
'pushmsg': TbMessageModelSerializer,
}
2023-12-21 14:46:34 +08:00
@action(methods=['post'], detail=False, url_path='client/heartbeat')
def heartbeat(self, request, *args, **kwargs):
2023-12-21 14:46:34 +08:00
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
return ApiResponse()
2023-12-21 14:46:34 +08:00
@action(methods=['post'], detail=False, url_path='client/pushmsg')
def pushmsg(self, request, *args, **kwargs):
2023-12-21 14:46:34 +08:00
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
return ApiResponse()
@action(methods=['get'], detail=False, url_path='usersend/getnonvid')
def novide(self, request, *args, **kwargs):
hook_users = JqrHookUser.objects.filter(vid__isnull=True).all().values('id', 'corpid', 'userid')
quns = JqrExternalQun.objects.filter(vid__isnull=True).all().values('id', 'corpid', 'chat_id')
return ApiResponse(data={
'hook_users': hook_users,
'quns': quns
})
@action(methods=['post'], detail=False, url_path='usersend/setvid')
def setvide(self, request, *args, **kwargs):
data = request.data
hook_users = data.get('hook_users', [])
hook_users = [JqrHookUser(**hook_user, utime=datetime.now()) for hook_user in hook_users]
quns = data.get('quns', [])
quns = [JqrExternalQun(**qun, utime=datetime.now()) for qun in quns]
JqrHookUser.objects.bulk_update(hook_users, fields=['vid', 'utime'])
JqrExternalQun.objects.bulk_update(quns, fields=['vid', 'utime'])
return ApiResponse()
@action(methods=['post'], detail=False, url_path='usersend/updatestatus')
def updatestatus(self, request, *args, **kwargs):
data = request.data
sendnewusermsgrecord = data.get('sendnewusermsgrecord', [])
sendnewusermsgrecord = [JqrSendnewusermsgrecord(**sendnewusermsgrecord, utime=datetime.now()) for sendnewusermsgrecord in sendnewusermsgrecord]
JqrSendnewusermsgrecord.objects.bulk_update(sendnewusermsgrecord, fields=['sendstate', 'utime'])
sendmsgrecordinfo = data.get('sendmsgrecordinfo', [])
sendmsgrecordinfo = [JqrSendmsgrecordinfo(**sendmsgrecordinfo, utime=datetime.now()) for sendmsgrecordinfo in sendmsgrecordinfo]
JqrSendmsgrecordinfo.objects.bulk_update(sendmsgrecordinfo, fields=['sendstate', 'utime'])
return ApiResponse()