Files

80 lines
3.1 KiB
Python
Raw Permalink Normal View History

# =============================================================================
# 企微IT智能服务台 — 企微回调消息 Pydantic Schema
# =============================================================================
# 说明:定义企微回调消息的数据结构
# 包含:GET验证请求、POST消息体、加解密相关
# =============================================================================
from typing import Optional
from pydantic import BaseModel, Field
# --------------------------------------------------------------------------
# 企微回调验证请求 Schema(GET 请求)
# --------------------------------------------------------------------------
class WecomCallbackVerify(BaseModel):
"""企微回调URL验证请求 Schema。
企微管理后台配置回调URL时,会发送GET请求验证。
需要验证签名并返回解密后的 echostr。
Attributes:
msg_signature: 企微签名(用于验证请求来源)
timestamp: 时间戳
nonce: 随机数
echostr: 加密的验证字符串(解密后返回给企微)
"""
msg_signature: str = Field(..., description="企微签名")
timestamp: str = Field(..., description="时间戳")
nonce: str = Field(..., description="随机数")
echostr: str = Field(..., description="加密的验证字符串")
# --------------------------------------------------------------------------
# 企微回调消息体 Schema(POST 请求解析后)
# --------------------------------------------------------------------------
class WecomCallbackMessage(BaseModel):
"""企微回调消息体 Schema。
企微推送消息时发送的XML解析后的结构。
包含加密的消息内容。
Attributes:
to_user_name: 接收方(企业ID
agent_id: 应用AgentID
encrypt: 加密的消息内容
"""
to_user_name: str = Field(default="", description="接收方企业ID")
agent_id: str = Field(default="", description="应用AgentID")
encrypt: str = Field(..., description="加密的消息内容")
# --------------------------------------------------------------------------
# 企微消息内容 Schema(解密后的消息)
# --------------------------------------------------------------------------
class WecomMessageContent(BaseModel):
"""企微消息内容 Schema(解密后)。
AES解密后的XML消息解析结果。
Attributes:
to_user_name: 接收方
from_user_name: 发送者企微UserID
create_time: 消息创建时间戳
msg_type: 消息类型(text/image等)
content: 消息内容
msg_id: 消息ID
agent_id: 应用AgentID
"""
to_user_name: str = Field(default="", description="接收方")
from_user_name: str = Field(..., description="发送者企微UserID")
create_time: int = Field(default=0, description="消息创建时间戳")
msg_type: str = Field(default="text", description="消息类型")
content: str = Field(default="", description="消息内容")
msg_id: str = Field(default="", description="消息ID")
agent_id: str = Field(default="", description="应用AgentID")