MCPcopy
hub / github.com/wechatpy/wechatpy / parse_message

Function parse_message

wechatpy/parser.py:18–52  ·  view source on GitHub ↗

解析微信服务器推送的 XML 消息 :param xml: XML 消息 :return: 解析成功返回对应的消息或事件,否则返回 ``UnknownMessage``

(xml)

Source from the content-addressed store, hash-verified

16
17
18def parse_message(xml):
19 """
20 解析微信服务器推送的 XML 消息
21
22 :param xml: XML 消息
23 :return: 解析成功返回对应的消息或事件,否则返回 ``UnknownMessage``
24 """
25 if not xml:
26 return
27 message = xmltodict.parse(to_text(xml))['xml']
28 message_type = message['MsgType'].lower()
29 event_type = None
30 if message_type == 'event' or message_type.startswith('device_'):
31 if 'Event' in message:
32 event_type = message['Event'].lower()
33 # special event type for device_event
34 if event_type is None and message_type.startswith('device_'):
35 event_type = message_type
36 elif message_type.startswith('device_'):
37 event_type = 'device_{event}'.format(event=event_type)
38
39 if event_type == 'subscribe' and message.get('EventKey'):
40 event_key = message['EventKey']
41 if event_key.startswith(('scanbarcode|', 'scanimage|')):
42 event_type = 'subscribe_scan_product'
43 message['Event'] = event_type
44 elif event_key.startswith('qrscene_'):
45 # Scan to subscribe with scene id event
46 event_type = 'subscribe_scan'
47 message['Event'] = event_type
48 message['EventKey'] = event_key[len('qrscene_'):]
49 message_class = EVENT_TYPES.get(event_type, UnknownMessage)
50 else:
51 message_class = MESSAGE_TYPES.get(message_type, UnknownMessage)
52 return message_class(message)

Calls 2

to_textFunction · 0.90
getMethod · 0.45

Used in the wild real call sites across dependent graphs

searching dependent graphs…