diff --git a/woa/init.py b/woa/init.py index 52c09f6..4cc48fe 100644 --- a/woa/init.py +++ b/woa/init.py @@ -178,27 +178,27 @@ class WOAHandler: rzt_dic.media_id = await self.media_manager.upload_media(rzt_dic.msgtype, rzt_dic.media_filepath) return rzt_dic - async def build_reply(self, msg:DictObject, rzt_msg:DictObject): + async def build_reply(self, msg:DictObject, rzt_msg:DictObject, timestamp): """ ImageReply, VoiceReply, VideoReply, ArticlesReply, MusicReply """ if rzt_msg.msgtype == 'text': - reply = ReplyBuilder.text(msg, content=rzt_msg.content) + reply = ReplyBuilder.text(msg, content=rzt_msg.content, create_time=timestamp) return reply if rzt_msg.msgtype in ['image', 'video', 'voice']: rzt_msg.media_id = await self.upload_media(rzt_msg.msgtype, rzt_msg.media_file) if rzt_msg.msgtype == 'image': - reply = ReplyBuilder.image(msg, media_id=rzt_msg.media_id) + reply = ReplyBuilder.image(msg, media_id=rzt_msg.media_id, create_time=timestamp) return reply if rzt_msg.msgtype == 'voice': - reply = ReplyBuilder.voice(msg, media_id=rzt_msg.media_id) + reply = ReplyBuilder.voice(msg, media_id=rzt_msg.media_id, create_time=timestamp) return reply if rzt_msg.msgtype == 'video': reply = ReplyBuilder.video(msg, title=rzt_msg.title, media_id=rzt_msg.media_id, - description=rzt_msg.description) + description=rzt_msg.description, create_time=timestamp) return reply if rzt_msg.msgtype == 'music': reply = ReplyBuilder.music(msg, @@ -207,10 +207,10 @@ class WOAHandler: music_url=rzt_msg.music_url, # 核心:播放链接 hq_music_url=rzt_msg.hq_music_url, # 核心:高质量链接 thumb_media_id=media_id # 核心:封面图 media_id - ) + , create_time=timestamp) return reply if rzt_msg.msgtype == 'news': - reply = ReplyBuilder.news(msg, rzt_msg.articles) + reply = ReplyBuilder.news(msg, rzt_msg.articles, create_time=timestamp) return reply async def handle_post(self, request: web.Request) -> web.Response: @@ -250,14 +250,14 @@ class WOAHandler: # --- 业务逻辑 --- reply_dic = await self.msghandle(msg_dict) debug(f'返回的消息:{reply_dic}') - reply_xml = await self.build_reply(msg_dict, reply_dic) + timestamp = str(int(time.time())) + nonce = ''.join([str(random.randint(0, 9)) for _ in range(10)]) + reply_xml = await self.build_reply(msg_dict, reply_dic, timestamp) debug(f'收到微信消息:{msg_dict} 返回:{reply_xml}') # 5. 如果需要加密回复 if self.aes_key and reply_xml: # 1. 生成新的时间戳和随机数 (不要用请求里的旧数据) - timestamp = str(int(time.time())) - nonce = ''.join([str(random.randint(0, 9)) for _ in range(10)]) encrypted_xml_str = self._encrypt_msg(reply_xml, nonce, timestamp) try: decode_data = self._decrypt_msg(encrypted_xml_str)