回调地址调整
This commit is contained in:
parent
de82cdfb90
commit
2b96c482fa
|
@ -3,7 +3,7 @@ import base64
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from libs.weworkapi.callback.WXBizMsgCrypt3 import WXBizMsgCrypt, Prpcrypt
|
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
|
import xml.etree.cElementTree as ET
|
||||||
|
|
||||||
|
|
||||||
|
@ -38,26 +38,21 @@ class WechatPublicTokenSerializer(serializers.Serializer):
|
||||||
|
|
||||||
|
|
||||||
class WechatEncryptSerializer(serializers.Serializer):
|
class WechatEncryptSerializer(serializers.Serializer):
|
||||||
ToUserName = serializers.CharField()
|
ToUserName = serializers.CharField(write_only=True)
|
||||||
Encrypt = serializers.CharField()
|
Encrypt = serializers.CharField(write_only=True)
|
||||||
AgentID = serializers.CharField()
|
AgentID = serializers.CharField(write_only=True)
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
def create(self, data):
|
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)
|
print(data)
|
||||||
|
return {}
|
||||||
|
|
||||||
def decrypt(self, encrypt, encoding_key):
|
def decrypt(self, encrypt, encoding_key):
|
||||||
try:
|
try:
|
||||||
|
|
||||||
key = base64.b64decode(encoding_key + "=")
|
key = base64.b64decode(encoding_key + "=")
|
||||||
prpcrypt = Prpcrypt(key)
|
prpcrypt = Prpcrypt(key)
|
||||||
corpid = ''
|
corpid = ''
|
||||||
|
@ -71,27 +66,9 @@ class WechatEncryptSerializer(serializers.Serializer):
|
||||||
|
|
||||||
def parse_xml(self, xmltext):
|
def parse_xml(self, xmltext):
|
||||||
xml_tree = ET.fromstring(xmltext)
|
xml_tree = ET.fromstring(xmltext)
|
||||||
to_user_name = get_attribute(xml_tree.find("ToUserName"), 'text')
|
data = {}
|
||||||
from_user_name = get_attribute(xml_tree.find("FromUserName"), 'text')
|
for child in xml_tree:
|
||||||
create_time = get_attribute(xml_tree.find("CreateTime"), 'text')
|
tag = child.tag
|
||||||
msg_type = get_attribute(xml_tree.find("MsgType"), 'text')
|
key = camel_to_snake(tag)
|
||||||
event = get_attribute(xml_tree.find("Event"), 'text')
|
data[key] = get_attribute(xml_tree.find(key), 'text')
|
||||||
change_type = get_attribute(xml_tree.find("ChangeType"), 'text')
|
return data
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,6 @@ class WechatWorkerViewSet(viewsets.GenericViewSet):
|
||||||
|
|
||||||
@verify.mapping.post
|
@verify.mapping.post
|
||||||
def message(self, request, path, *args, **kwargs):
|
def message(self, request, path, *args, **kwargs):
|
||||||
print(request.data)
|
|
||||||
if not settings.DEBUG:
|
if not settings.DEBUG:
|
||||||
data = request.data
|
data = request.data
|
||||||
# cbtest.xbtool.cn
|
# cbtest.xbtool.cn
|
||||||
|
@ -43,14 +42,15 @@ class WechatWorkerViewSet(viewsets.GenericViewSet):
|
||||||
data = renderer.render(data)
|
data = renderer.render(data)
|
||||||
url = f'https://46i859447w.yicp.fun/event/callback/{path}'
|
url = f'https://46i859447w.yicp.fun/event/callback/{path}'
|
||||||
res = requests.post(url, data=data, headers={'Content-Type': 'text/xml'})
|
res = requests.post(url, data=data, headers={'Content-Type': 'text/xml'})
|
||||||
return Response(data=res.json())
|
return Response()
|
||||||
[business, corpid, agentid, uid] = path.split('_')
|
[business, corpid, agentid, uid] = path.split('_')
|
||||||
corp = QcCorpinfo.objects.get(corpid=corpid, agentid=agentid, uid=uid)
|
corp = QcCorpinfo.objects.get(corpid=corpid, agentid=agentid, uid=uid)
|
||||||
context = self.get_serializer_context()
|
context = self.get_serializer_context()
|
||||||
context['corp'] = corp
|
context['corp'] = corp
|
||||||
serializer = WechatEncryptSerializer(data=request.data, context=context)
|
serializer = WechatEncryptSerializer(data=request.data, context=context)
|
||||||
serializer.is_valid(raise_exception=True)
|
serializer.is_valid(raise_exception=True)
|
||||||
return Response(data=serializer.data)
|
serializer.save()
|
||||||
|
return Response()
|
||||||
|
|
||||||
def get_parsers(self):
|
def get_parsers(self):
|
||||||
if self.request.method == 'POST':
|
if self.request.method == 'POST':
|
||||||
|
|
|
@ -254,3 +254,8 @@ def get_attribute(obj, field):
|
||||||
if obj is None:
|
if obj is None:
|
||||||
return
|
return
|
||||||
return getattr(obj, field)
|
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