回调地址调整

This commit is contained in:
AKW 2023-12-14 15:29:55 +08:00
parent de82cdfb90
commit 2b96c482fa
3 changed files with 24 additions and 42 deletions

View File

@ -3,7 +3,7 @@ import base64
from rest_framework import serializers
from libs.weworkapi.callback.WXBizMsgCrypt3 import WXBizMsgCrypt, Prpcrypt
from utils.tools import sha1_encoder, get_attribute
from utils.tools import sha1_encoder, get_attribute, camel_to_snake
import xml.etree.cElementTree as ET
@ -38,26 +38,21 @@ class WechatPublicTokenSerializer(serializers.Serializer):
class WechatEncryptSerializer(serializers.Serializer):
ToUserName = serializers.CharField()
Encrypt = serializers.CharField()
AgentID = serializers.CharField()
def validate(self, attrs):
# encoding_aes_key = settings.WECHAT_WORKER.get('EncodingAESKey')
corp = self.context.get('corp')
encoding_aes_key = corp.encodingaeskey
encrypt = attrs.get('Encrypt')
xmltext = self.decrypt(encrypt, encoding_aes_key)
data = self.parse_xml(xmltext)
print('data-->', data)
return attrs
ToUserName = serializers.CharField(write_only=True)
Encrypt = serializers.CharField(write_only=True)
AgentID = serializers.CharField(write_only=True)
def create(self, data):
corp = self.context.get('corp')
encoding_aes_key = corp.encodingaeskey
encrypt = data.get('Encrypt')
xmltext = self.decrypt(encrypt, encoding_aes_key)
data = self.parse_xml(xmltext)
print(data)
return {}
def decrypt(self, encrypt, encoding_key):
try:
key = base64.b64decode(encoding_key + "=")
prpcrypt = Prpcrypt(key)
corpid = ''
@ -71,27 +66,9 @@ class WechatEncryptSerializer(serializers.Serializer):
def parse_xml(self, xmltext):
xml_tree = ET.fromstring(xmltext)
to_user_name = get_attribute(xml_tree.find("ToUserName"), 'text')
from_user_name = get_attribute(xml_tree.find("FromUserName"), 'text')
create_time = get_attribute(xml_tree.find("CreateTime"), 'text')
msg_type = get_attribute(xml_tree.find("MsgType"), 'text')
event = get_attribute(xml_tree.find("Event"), 'text')
change_type = get_attribute(xml_tree.find("ChangeType"), 'text')
user_id = get_attribute(xml_tree.find("UserID"), 'text')
external_user_id = get_attribute(xml_tree.find("ExternalUserID"), 'text')
state = get_attribute(xml_tree.find("State"), 'text')
welcome_code = get_attribute(xml_tree.find("WelcomeCode"), 'text')
return {
'to_user_name': to_user_name,
'from_user_name': from_user_name,
'create_time': create_time,
'msg_type': msg_type,
'event': event,
'change_type': change_type,
'user_id': user_id,
'external_user_id': external_user_id,
'state': state,
'welcome_code': welcome_code
}
data = {}
for child in xml_tree:
tag = child.tag
key = camel_to_snake(tag)
data[key] = get_attribute(xml_tree.find(key), 'text')
return data

View File

@ -35,7 +35,6 @@ class WechatWorkerViewSet(viewsets.GenericViewSet):
@verify.mapping.post
def message(self, request, path, *args, **kwargs):
print(request.data)
if not settings.DEBUG:
data = request.data
# cbtest.xbtool.cn
@ -43,14 +42,15 @@ class WechatWorkerViewSet(viewsets.GenericViewSet):
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())
return Response()
[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)
return Response(data=serializer.data)
serializer.save()
return Response()
def get_parsers(self):
if self.request.method == 'POST':

View File

@ -254,3 +254,8 @@ def get_attribute(obj, field):
if obj is None:
return
return getattr(obj, field)
def camel_to_snake(name):
s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower()