接收用户消息
微信公众账号能够接收用户发送的六种格式的消息:文本,图片,语音,视频(短视频),地理位置,链接。
def responseMsg(self): encrypt_type = self.request.GET.get(\'encrypt_type\', None) pc, postStr = self._encrypt_data(encrypt_type) postObj = self._parseMsg(postStr) print(postObj) msg_type = postObj[\'MsgType\'] result = \'\' if msg_type == \'text\': result = self._receiveText(postObj) elif msg_type == \'image\': result = self._receiveImage(postObj) elif msg_type == \'voice\': result = self._receiveVoice(postObj) elif msg_type == \'video\' or msg_type == \'shortvideo\': print(\'视频\') print(msg_type) result = self._receiveVideo(postObj) elif msg_type == \'location\': result = self._receiveLocation(postObj) elif msg_type == \'link\': result = self._receiveLink(postObj) elif msg_type == \'event\': result = self._receiveEvent(postObj) else: result = \'不能识别的 msg type: \' + msg_type
def _transmitText(self,obj,content): xmlTpl =\'\'\' <xml> <ToUserName><![CDATA[{0}]]></ToUserName> <FromUserName><![CDATA[{1}]]></FromUserName> <CreateTime>{2}</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[{3}]]></Content> </xml> \'\'\' result = xmlTpl.format(obj[\'FromUserName\'],obj[\'ToUserName\'],int(time.time()),content) return result
接收消息类:
\'\'\'微信公众号接收到的用户消息类型 https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_standard_messages.html \'\'\' import xml.etree.ElementTree as ET def parse_xml(web_data): if len(web_data) == 0: return None xmlData = ET.fromstring(web_data) msg_type = xmlData.find(\'MsgType\').text if msg_type == \'text\': return ReceiveTextMsg(xmlData) elif msg_type == \'image\': return ReceiveImageMsg(xmlData) elif msg_type == \'voice\': return ReceiveVoiceMsg(xmlData) elif msg_type in (\'video\',\'shortvideo\'): return ReceiveVideoMsg(xmlData) elif msg_type == \'location\': return ReceiveLocationMsg(xmlData) elif msg_type == \'link\': return ReceiveLinkMsg(xmlData) else: print(\'不能识别的消息类型:\'+ msg_type) return None class ReceiveMsg(object): \'\'\'基类\'\'\' def __init__(self,xmlData): self.ToUserName = xmlData.find(\'ToUserName\').text self.FromUserName = xmlData.find(\'FromUserName\').text self.CreateTime = xmlData.find(\'CreateTime\').text self.MsgType = xmlData.find(\'MsgType\').text self.MsgId = xmlData.find(\'MsgId\').text class ReceiveTextMsg(ReceiveMsg): \'\'\'文本消息\'\'\' def __init__(self,xmlData): super(ReceiveTextMsg,self).__init__(xmlData) self.Content = xmlData.find(\'Content\').text class ReceiveImageMsg(ReceiveMsg): \'\'\'图片消息\'\'\' def __init__(self,xmlData): super(ReceiveImageMsg,self).__init__(xmlData) self.PicUrl = xmlData.find(\'PicUrl\').text self.MediaId = xmlData.find(\'MediaId\').text class ReceiveVoiceMsg(ReceiveMsg): \'\'\'语音消息\'\'\' def __init__(self,xmlData): super(ReceiveVoiceMsg,self).__init__(xmlData) self.Format = xmlData.find(\'Format\').text self.MediaId = xmlData.find(\'MediaId\').text self.Recognition = \'\' if xmlData.find(\'Recognition\') is not None: self.Recognition = xmlData.find(\'Recognition\').text class ReceiveVideoMsg(ReceiveMsg): \'\'\'视频消息和小视频消息\'\'\' def __init__(self,xmlData): super(ReceiveVideoMsg,self).__init__(xmlData) self.ThumbMediaId = xmlData.find(\'ThumbMediaId\').text self.MediaId = xmlData.find(\'MediaId\').text class ReceiveLocationMsg(ReceiveMsg): \'\'\'地理位置消息\'\'\' def __init__(self,xmlData): super(ReceiveLocationMsg,self).__init__(xmlData) self.Location_X = xmlData.find(\'Location_X\').text self.Location_Y = xmlData.find(\'Location_Y\').text self.Scale = xmlData.find(\'Scale\').text self.Label = xmlData.find(\'Label\').text class ReceiveLinkMsg(ReceiveMsg): \'\'\'链接消息\'\'\' def __init__(self,xmlData): super(ReceiveLinkMsg,self).__init__(xmlData) self.Title = xmlData.find(\'Title\').text self.Description = xmlData.find(\'Description\').text self.Url = xmlData.find(\'Url\').text class ReceiveEventMsg(ReceiveMsg): \'\'\'普通事件\'\'\' def __init__(self, xmlData): super(ReceiveEventMsg,self).__init__(xmlData) self.Event = xmlData.find(\'Event\').text self.EventKey = (False,\'\') if xmlData.find(\'EventKey\') is not None: self.EventKey =(True, xmlData.find(\'EventKey\').text) self.Ticket = (False,\'\') if xmlData.find(\'Ticket\') is not None: self.EventKey =(True, xmlData.find(\'Ticket\').text) class ReveiveLocationEventMsg(ReceiveEventMsg): \'\'\'上报地理位置事件\'\'\' def __init__(self,xmlData): super(ReveiveLocationEventMsg,self).__init__(xmlData) self.Latitude = xmlData.find(\'Latitude\').text self.Longitude = xmlData.find(\'Longitude\').text self.Precision = xmlData.find(\'Precision\').text
版权声明:本文为ahMay原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。