yj
2026-03-31 033d919018b3a3e12755f008c0b9093364942512
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
o
‹|oh'ã@shddlmmZddlmZddlZddlZddlm    Z    ddl
Z
ddl m Z e   ¡ZGdd„dƒZdS)éN)Ú WXBizMsgCrypt)Ú RedisManager)Ú global_configc@sdeZdZedd„ƒZedd„ƒZedd„ƒZedd„ƒZed    d
„ƒZedd d „ƒZ    eddd„ƒZ
dS)Ú
WeComUtilscCs,ttjtjdƒ}| ||||¡\}}||fS©NÚ)rÚconfigÚWECOM_BOT_TOKENÚWECOM_BOT_AES_KEYZ    VerifyURL)Ú    timestampÚnonceZ msg_encryptÚ    signatureÚ wecom_cryptÚretÚ reply_echostr©rú2E:\project\python\wecom-dify-bridge\wecom_utils.pyÚ
verify_urlszWeComUtils.verify_urlcCs,ttjtjdƒ}| ||||¡\}}||fSr)rrr    r
Z
DecryptMsg)Ú    post_dataÚ msg_signatureZ
time_stampr rrZ xml_contentrrrÚ decrypt_msgszWeComUtils.decrypt_msgcCs*ttjtjdƒ}| |||¡\}}||fSr)rrr    r
Z
EncryptMsg)Úcontentr r rrÚ encrypt_msgrrrrszWeComUtils.encrypt_msgc
Cszbt |¡}| d¡j| d¡j| d¡j| d¡j| d¡dur'| d¡jnd| d¡j| d    ¡dur:| d    ¡jndd
œ}| d ¡durM| d ¡j|d <| d ¡dur`d d„| d ¡Dƒ|d <|WSty}zt d|›¡t d|›¡‚d}~ww)u解析机器人消息XMLÚ
ToUserNameÚ FromUserNameÚ
CreateTimeÚMsgTypeÚContentNrÚMsgIdÚAgentID)rrrrrrrZChatIdÚListcSsg|]}|j‘qSr)Útext)Ú.0ÚitemrrrÚ
<listcomp>4sz0WeComUtils.parse_bot_message.<locals>.<listcomp>zXML parsing error: z XML content: )ÚETZ
fromstringÚfindr!Ú    ExceptionÚloggingÚerror)Zxml_strÚrootÚresultÚerrrÚparse_bot_message!s*
 
 
 
 
 
ù €ýzWeComUtils.parse_bot_messagecCs"ttt ¡ƒƒ}|›d|›}|S)Nú-)ÚstrÚintÚtime)Úuser_idÚmsg_idr Ú    stream_idrrrÚgenerate_stream_id=szWeComUtils.generate_stream_idFcCsxd}d||ddœdœ}|s3tƒ}| |¡}|sdS| |¡}| |¡}|s'd}||dd<||dd    <tj|dd
}|S) u创建响应数据FÚstreamr)ÚidÚfinishr)Úmsgtyper6NTr8r)Ú ensure_ascii)rÚ exists_streamÚget_stream_chunkÚjsonÚdumps)r4Úfirstr8Zresponse_messageÚ redis_managerZexists_stream_chunksrrrrÚcreate_response_messageCs(ýþ
 
 
 
  z"WeComUtils.create_response_messageéPúutf-8cCsŠ| |¡}g}d}|t|ƒkrC||}|||…}    z| |¡}Wnty4|d8}|||…}Ynwq| |¡|}|t|ƒks|S)NrTé)ÚencodeÚlenÚdecodeÚUnicodeDecodeErrorÚappend)ÚsZ    max_bytesÚencodingÚencodedÚchunksÚstartÚendÚchunkrrrÚsplit_string_safelygs&
 
 ýû
 
 ðzWeComUtils.split_string_safelyN)F)rBrC) Ú__name__Ú
__module__Ú __qualname__Ú staticmethodrrrr-r5rArQrrrrr s
 
 
 
 
 #r)Zxml.etree.ElementTreeZetreeZ ElementTreer%Zwecom.WXBizMsgCryptrr(r1r@rr=Úconfig_managerrÚ
get_configrrrrrrÚ<module>s