微信点餐平台开发(二)
admin
2023-07-30 21:45:03
0

微信点餐平台开发(二)

上一篇我们完成了微信公众平台与SAE的联通,接下来我们实现关注提示及自定义菜单。

关注公众号自动发送信息给客户端

用户与公众号之间的信息交互类型分为文本、图片、语音、视频、小视频、地理位置、链接等,关注后自动推送欢迎信息,用到了文本信息。
文本信息XML格式如下




%s


0

具体参数详解参照微信公众号开发手册
代码实现:

import xml.etree.ElementTree as ET
from flask import Flask, request

TEXT_MSG_TPL = \\
u\"\"\"



%s


0

\"\"\"

WELCOME_INFO = \\
u\"\"\"
欢迎关注微信餐厅微信点餐
\"\"\"

#来自微信服务器的消息推送
@app.route(\'/weixin\', methods=[\'POST\'])
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

自定义菜单

这里我们分三个一级菜单,二个二级菜单。
首先获得AppId和AppSecert,在微信公众平台开发者中心可以找到。
代码实现如下:

appid=\'xxxxxxx\'
secret=\'xxxxxx\'
# 获得Access Token
gettoken=\'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=\'+appid+\'&secret=\'+secret

f=urllib2.urlopen(gettoken)

stringjson=f.read()

access_token=json.loads(stringjson)[\'access_token\']

posturl=\'https://api.weixin.qq.com/cgi-bin/menu/create?access_token=\'+access_token

# 接口调用请求
menu=\'\'\'{
    \"button\":[
    {
    \"type\":\"click\",
    \"name\":\"预定\",
    \"key\":\"CLICK_RESERVE\"
    },
    {
    \"type\":\"view\",
    \"name\":\"点菜\",
    \"url\":\"http://xxxx.sinaapp.com/menu\"
    },
    {
    \"name\":\"服务\",
    \"sub_button\":[
        {
        \"type\":\"click\",
        \"name\":\"线路导航\",
        \"key\":\"CLICK_ROUTE\"
        },
        {
        \"type\":\"view\",
        \"name\":\"微信餐厅\",
        \"url\":\"http://xxx.sinaapp.com/about\"
        }
    ]
    }
    ]
}
\'\'\'

# 提交菜单内容给服务器
request=urllib2.urlopen(posturl,menu.encode(\'utf-8\'))

# 查看是否成功
# 正确时的返回JSON数据包:{\"errcode\":0,\"errmsg\":\"ok\"}
# 错误时的返回JSON数据包:{\"errcode\":xxxx,\"errmsg\":\"xxxx\"}
print request.read()
参数说明
参数 是否必须 说明
button 一级菜单数组,个数应为1-3个
sub_button 二级菜单数组,个数1-5个
type 菜单的响应动作类型,目前有click,view两种类型
name 菜单标题,不超过16个字节,子菜单不超过40个字节
key click类型必须 菜单KEY值,用于信息接口推送,不超过128字节
url view类型必须 网页链接,用户点击菜单可打开链接,不超过256字节

响应菜单点击事件(一)

在信息接口中处理event事件,其中的click代表菜单点击,通过响应菜单结构中的key值回应信息,view事件无须响应,将直接跳转过去。

        # 判断并处理click事件推送
        elif user_click_event(msg):
            if msg[\'EventKey\']==\'CLICK_RESERVE\':
                return goreserve(msg)
            if msg[\'EventKey\']==\'CLICK_ROUTE\':
                fromusername=msg[\'FromUserName\']
                userLoc=model.get_user_location(fromusername)
                if userLoc:
                    return goroute(msg)
                else:
                    return route_info(msg)

接下来一篇我们将详细实现点击事件功能。


各位如需要SAE云,可以使用我的邀请链接申请。各得100云豆,谢谢!
注册地址:http://t.cn/R4jxHGe

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...