From 14c85ca342890a3ca6f2fe291ae8a28cd15c0e53 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Tue, 3 Mar 2026 16:09:57 +0800 Subject: [PATCH] bugfix --- README.md | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++ woa/init.py | 10 ++++++++- woa/reply.py | 32 ++++++++++++++-------------- 3 files changed, 85 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 87e09e8..91899bb 100644 --- a/README.md +++ b/README.md @@ -5,12 +5,72 @@ ## 接收消息类型 * TextMessage +{ + 'ToUserName': '', + 'FromUserName': '', + 'CreateTime': '', + 'MsgType': 'text', + 'Content': 'hret', + 'MsgId': '25376371128450301' +} * ImageMessage +{ + 'ToUserName': '', + 'FromUserName': '', + 'CreateTime': '', + 'MsgType': 'image', + 'PicUrl': '可直接使用的图像url', + 'MsgId': '25376358150108245', + 'MediaId': 'utihMtnTma-qbcPMfc7zQlAAhT' +} + * VoiceMessage +数据内容: +{ + 'ToUserName': '微信服务号id', + 'FromUserName': '用户的openid', + 'CreateTime': '消息时间', + 'MsgType': 'voice', + 'MediaId': '媒体id,用此可以转可下载的url', + 'Format': 'amr', + 'MsgId': '7612907756399362048', + 'Recognition': None, # 识别结果 + 'MediaId16K': '16K音质的mediaid' +} * VideoMessage +{ + 'ToUserName': '', + 'FromUserName': '', + 'CreateTime': '', + 'MsgType': 'video', + 'MediaId': '', + 'ThumbMediaId': '', + 'MsgId': '817'} * LocationMessage +{ + 'ToUserName': '', + 'FromUserName': '', + 'CreateTime': '', + 'MsgType': 'location', + 'Location_X': '', + 'Location_Y': '', + 'Scale': '15', + 'Label': '', + 'MsgId': '' +} * LinkMessage * EventMessage +1 自定义菜单 +{ + 'ToUserName': '', + 'FromUserName': '', + 'CreateTime': '', + 'MsgType': 'event', + 'Event': 'VIEW', + 'EventKey': '点击菜单对应的URL', + 'MenuId': '' +} +2 关注 发送给消息处理程序的结构: { diff --git a/woa/init.py b/woa/init.py index da8988a..52c09f6 100644 --- a/woa/init.py +++ b/woa/init.py @@ -156,12 +156,20 @@ class WOAHandler: """ config = getConfig() if msg.MsgType in ['video', 'voice', 'image']: - msg.media_url = self.media_manager.get_media_url(msg.media_id) + msg.media_url = await self.media_manager.get_media_url(msg.MediaId) msg.subscribe_id = getID() + # 文本测试, 已通过 + """ rzt_dic = DictObject(**{ 'msgtype':'text', 'content': '收到' }) + """ + fs = FileStorage() + rzt_dic = DictObject(**{ + "msgtype": "video", + "media_file": fs.realPath('/UiEi7hKqAmU1-jqQEVhZe/5/171/99/17/vidu-1.mp4') + }) return rzt_dic await zmq_publish(config.woa_handler_id, json.dumps(msg, ensure_ascii=False)) result = await zmq_subcribe(msg.subscribe_id) diff --git a/woa/reply.py b/woa/reply.py index 1acab3c..16b2e3d 100644 --- a/woa/reply.py +++ b/woa/reply.py @@ -28,7 +28,7 @@ class ReplyBuilder: """ @staticmethod - def text(msg: Dict[str, Any], content: str) -> str: + def text(msg: Dict[str, Any], content: str, create_time=None) -> str: """ 构造文本回复 :param msg: 原始接收消息字典 @@ -36,14 +36,14 @@ class ReplyBuilder: """ to_user = msg.get('FromUserName') from_user = msg.get('ToUserName') - create_time = int(time.time()) + create_time = create_time or int(time.time()) xml = ReplyBuilder._get_base_xml(to_user, from_user, create_time, 'text') xml += f"\n" return xml @staticmethod - def image(msg: Dict[str, Any], media_id: str) -> str: + def image(msg: Dict[str, Any], media_id: str, create_time=None) -> str: """ 构造图片回复 :param msg: 原始接收消息字典 @@ -51,7 +51,7 @@ class ReplyBuilder: """ to_user = msg.get('FromUserName') from_user = msg.get('ToUserName') - create_time = int(time.time()) + create_time = create_time or int(time.time()) xml = ReplyBuilder._get_base_xml(to_user, from_user, create_time, 'image') xml += f""" @@ -61,7 +61,7 @@ class ReplyBuilder: return xml @staticmethod - def voice(msg: Dict[str, Any], media_id: str) -> str: + def voice(msg: Dict[str, Any], media_id: str, create_time=None) -> str: """ 构造语音回复 :param msg: 原始接收消息字典 @@ -69,7 +69,7 @@ class ReplyBuilder: """ to_user = msg.get('FromUserName') from_user = msg.get('ToUserName') - create_time = int(time.time()) + create_time = create_time or int(time.time()) xml = ReplyBuilder._get_base_xml(to_user, from_user, create_time, 'voice') xml += f""" @@ -79,7 +79,7 @@ class ReplyBuilder: return xml @staticmethod - def video(msg: Dict[str, Any], media_id: str, title: str = "", description: str = "") -> str: + def video(msg: Dict[str, Any], media_id: str, title: str = "", description: str = "", create_time=None) -> str: """ 构造视频回复 :param msg: 原始接收消息字典 @@ -89,7 +89,7 @@ class ReplyBuilder: """ to_user = msg.get('FromUserName') from_user = msg.get('ToUserName') - create_time = int(time.time()) + create_time = create_time or int(time.time()) xml = ReplyBuilder._get_base_xml(to_user, from_user, create_time, 'video') xml += f"""