微信点餐平台开发(二)
上一篇我们完成了微信公众平台与SAE的联通,接下来我们实现关注提示及自定义菜单。
关注公众号自动发送信息给客户端
用户与公众号之间的信息交互类型分为文本、图片、语音、视频、小视频、地理位置、链接等,关注后自动推送欢迎信息,用到了文本信息。
文本信息XML格式如下1
2
3
4
5
6
7
8<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>0</FuncFlag>
</xml>
具体参数详解参照微信公众号开发手册
代码实现: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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59import xml.etree.ElementTree as ET
from flask import Flask, request
TEXT_MSG_TPL = \
u"""
<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>0</FuncFlag>
</xml>
"""
WELCOME_INFO = \
u"""
欢迎关注微信餐厅微信点餐
"""
#来自微信服务器的消息推送
def weixin_msg():
if verification(request):
data = request.data
msg = parse_msg(data)
# 用户关注微信公众号时自动发送欢迎信息到用户端
if user_subscribe_event(msg):
return welcome_info(msg)
# 用户发送?到公众号时自动回复欢迎信息
elif is_text_msg(msg):
content = msg['Content']
if content == u'?' or content == u'?':
return welcome_info(msg)
# 将消息解析为dict
def parse_msg(rawmsgstr):
root = ET.fromstring(rawmsgstr)
msg = {}
for child in root:
msg[child.tag] = child.text
return msg
# 判断用户信息类型是否为文本信息
def is_text_msg(msg):
return msg['MsgType'] == 'text'
# 判断是否为关注事件
def user_subscribe_event(msg):
return msg['MsgType'] == 'event' and msg['Event'] == 'subscribe'
# 返回欢迎信息值
def welcome_info(msg):
return response_text_msg(msg, WELCOME_INFO)
# 给定一个信息模板,返回对应对应值
def response_text_msg(msg, content):
s = TEXT_MSG_TPL % (msg['FromUserName'], msg['ToUserName'], str(int(time.time())), content)
return s