feat: 迁移企业微信模块(crypto + client + handler)
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
import xml.etree.cElementTree as ET
|
||||
from typing import Optional
|
||||
|
||||
from app.wechat.crypto import WXBizMsgCrypt
|
||||
from app.config import settings
|
||||
|
||||
|
||||
class WeChatMessageHandler:
|
||||
def __init__(self):
|
||||
self.wxcpt = WXBizMsgCrypt(
|
||||
sToken=settings.wechat_token,
|
||||
sEncodingAESKey=settings.wechat_encoding_aes_key,
|
||||
sReceiveId=settings.wechat_corp_id,
|
||||
)
|
||||
|
||||
def verify_url(
|
||||
self, msg_signature: str, timestamp: str, nonce: str, echostr: str
|
||||
) -> Optional[str]:
|
||||
ret, sEchoStr = self.wxcpt.VerifyURL(
|
||||
msg_signature, timestamp, nonce, echostr
|
||||
)
|
||||
if ret == 0:
|
||||
return (
|
||||
sEchoStr.decode("utf-8")
|
||||
if isinstance(sEchoStr, bytes)
|
||||
else sEchoStr
|
||||
)
|
||||
return None
|
||||
|
||||
def decrypt_message(
|
||||
self,
|
||||
post_data: str,
|
||||
msg_signature: str,
|
||||
timestamp: str,
|
||||
nonce: str,
|
||||
) -> Optional[ET.Element]:
|
||||
ret, xml_content = self.wxcpt.DecryptMsg(
|
||||
post_data, msg_signature, timestamp, nonce
|
||||
)
|
||||
if ret != 0:
|
||||
return None
|
||||
return ET.fromstring(xml_content)
|
||||
|
||||
def encrypt_response(
|
||||
self, response_xml: str, nonce: str, timestamp: str
|
||||
) -> Optional[str]:
|
||||
ret, encrypted = self.wxcpt.EncryptMsg(response_xml, nonce, timestamp)
|
||||
if ret == 0:
|
||||
return encrypted
|
||||
return None
|
||||
|
||||
def handle_event(
|
||||
self, event: str, event_key: Optional[str], from_user: str
|
||||
) -> Optional[str]:
|
||||
return None
|
||||
|
||||
def handle_text(self, content: str, from_user: str) -> Optional[str]:
|
||||
return None
|
||||
Reference in New Issue
Block a user