回调地址调整
This commit is contained in:
parent
de82cdfb90
commit
2b96c482fa
|
@ -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
|
||||
|
|
|
@ -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':
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue