自定义菜单的创建

2.5.2 自定义菜单的创建

创建菜单的接口地址是:https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN。
上面的地址中的 ACCESS_TOKEN 是通过凭证接口获取到的凭证。POST 参数如下:

{
    "button":[
    {
        "type":"click",
        "name":"今日歌曲",
        "key":"V1001_TODAY_MUSIC"
    },
    {
        "type":"click",
        "name":"歌手简介",
        "key":"V1001_TODAY_SINGER"
    },
    {
        "name":"菜单",
        "sub_button":[
        {
            "type":"view",
            "name":"搜索",
            "url":"http://www.ausdn.com/tool/"
        },
		{
            "type":"view",
            "name":"视频",
            "url":"http://www.weixingon.com/wechat/bookreview/wechatbehindthescenes.php"
        },
        {
            "type":"click",
            "name":"赞一下我们",
            "key":"V1001_GOOD"
        }]
    }]
}

这个 POST 参数是一个 JSON 格式的字符串。JSON 格式是 HTTP 网络传送中经常用到的字符串格式。这种格式和 PHP 的多维数组结合得非常好,JSON 格式中中括号包含的字符串对应 PHP 的数值数组,而大括号内的字符串对应 PHP 的关联数组。PHP 提供了两个内建的函数来处理 JSON 格式的字符串:json_encode 把 PHP 数组转换成 JSON 格式的字符串;json_decode 把 JSON 格式的字符串转换成 PHP 的多维数组。上面的 JSON 格式的字符串用 json_decode 函数之后得到的 PHP 数组如下所示:

array(
"button" => array(
    array(
        "type" => "click",
        "name" => "今日歌曲",
        "key" => "V1001_TODAY_MUSIC"
    ),
    array(
        "type" => "click",
        "name" => "歌手简介",
        "key" => "V1001_TODAY_SINGER"
    ),
    array(
        "name" => "菜单",
        "sub_button" => array(
                array(
                    "type" => "view",
                    "name" => "搜索",
                    "key" => "http://www.ausdn.com/tool/"
                ),
				array(
                    "type" => "view",
                    "name" => "视频",
                    "key" => "http://www.weixingon.com/wechat/bookreview/wechatbehindthescenes.php"
                ),
                array(
                    "type" => "click",
                    "name" => "赞一下我们",
                    "key" => "V1001_GOOD"
                )
            )
        )
    )
);

JSON 格式的一般使用方法是:在发送请求前,用 PHP 数组表示需要发送的数据,然后使用 json_encode 把 PHP 数组编码成 JSON 字符串,接着把 JSON 字符串以 HTTP 的 POST 数据的形式发送出去。程序接收到返回的 JSON 数据段的时候,使用 json_decode 转换成 PHP 数组,然后再获取需要的数据。
创建菜单请求的 POST 数据的各个参数的详细描述如表 2-11 所示。

表 2-11 创建菜单请求中各个参数的描述

参数是否必须说明
button按钮数组,按钮个数应为 1~3 个
sub_button子按钮数组,按钮个数应为 1~5 个
type按钮类型,目前有 click 类型
name按钮描述,即按钮名字,不超过16 字节,子菜单不超过 40 个字节
key类型为 click 必须按钮 KEY 值,用于消息接口(event 类型) 推送,不超过 128 字节
url类型为 view 必须网页链接,用户点击菜单可打开链接,不超过 256 字节

请求成功后得到的返回字符串如下:

{"errcode":0,"errmsg":"ok"}

请求失败的话返回字符串如下:

{"errcode":40018,"errmsg":"invalid button name size"}

其中 errcode 表示错误码,errmsg 表示对应的错误信息。所有错误码及其错误信息的描述如表 2-12 所示。

表 2-12 返回码说明

返回码说明
–1系统繁忙
0请求成功
40001验证失败
40002不合法的凭证类型
40003不合法的 OpenID
40004不合法的媒体文件类型
40005不合法的文件类型
40006不合法的文件大小
40007不合法的媒体文件ID
40008不合法的消息类型
40009不合法的图片文件大小
40010不合法的语音文件大小
40011不合法的视频文件大小
40012不合法的缩略图文件大小
40013不合法的 APPID
40014不合法的 access_token
40015不合法的菜单类型
40016不合法的按钮个数
40017不合法的按钮个数
40018不合法的按钮名字长度
40019不合法的按钮 KEY 长度
40020不合法的按钮 URL 长度
40021不合法的菜单版本号
40022不合法的子菜单级数
40023不合法的子菜单按钮个数
40024不合法的子菜单按钮类型
40025不合法的子菜单按钮名字长度
40026不合法的子菜单按钮 KEY 长度
40027不合法的子菜单按钮 URL 长度
40028不合法的自定义菜单使用用户
40029不合法的 oauth_code
40030不合法的 refresh_token
40031不合法的 openid 列表
40032不合法的 openid 列表长度
40033不合法的请求字符,不能包含 \uxxxx 格式的字符
40035不合法的参数
40038不合法的请求格式
40039不合法的 URL 长度
40050不合法的分组 id
40051分组名字不合法
41001缺少 access_token 参数
41002缺少 appid 参数
41003缺少 refresh_token 参数
41004缺少 secret 参数
41005缺少多媒体文件数据
41006缺少 media_id 参数
41007缺少子菜单数据
41008缺少 oauth code
41009缺少 openid
42001access_token 超时
42002refresh_token 超时
42003oauth_code 超时
43001需要 GET 请求
43002需要 POST 请求
43003需要 HTTPS 请求
43004需要接收者关注
43005需要好友关系
44001多媒体文件为空
44002POST 的数据包为空
44003图文消息内容为空
44004文本消息内容为空
45001多媒体文件大小超过限制
45002消息内容超过限制
45003标题字段超过限制
45004描述字段超过限制
45005链接字段超过限制
45006图片链接字段超过限制
45007语音播放时间超过限制
45008图文消息超过限制
45009接口调用超过限制
45010创建菜单个数超过限制
45015回复时间超过限制
45016系统分组,不允许修改
45017分组名字过长
45018分组数量超过上限
46001不存在媒体数据
46002不存在的菜单版本
46003不存在的菜单数据
46004不存在的用户
47001解析 JSON/XML 内容错误
48001api 功能未授权
50001用户未授权该 api

菜单请求创建成功后的自定义菜单如图 2-7 所示。
成功创建的菜单
图2-7 成功创建的菜单

菜单创建成功之后,当用户单击任意的一个 click 类型按钮时,公众账号后台会收到一个事件推送信息,消息的中的 Event 为“CLICK”,EventKey 为菜单定义中对应的 KEY 值。用户点击 view 类型按钮后,微信客户端将会打开开发者在按钮中填写的 url 值 (即网页链接),达到打开网页的目的,建议与网页授权获取用户基本信息接口结合,获得用户的登入个人信息。在创建完自定义菜单之后,用户的微信并不能立即看到这些菜单,需要大概一天的时间之后才会展现出来。这是因为微信客户端的缓存过期时间是 24 小时。但是我们测试自己的程序不可能等这么长时间,一个好办法是先取消关注自己的公众账号,重启微信,然后重新关注。这样微信会立即重新拉一次最新的自定义菜单数据并做展现。

下一节 2.5.3 自定义菜单的获取
上一节 2.5.1 获取凭证的方法
返回微信公众平台应用开发实战

天香空城微信二维码
关注 天香空城 微信号 ulisse 或扫描二维码,可以了解微信营销书籍
微信营销书评
微信公众平台开发源码

返回微信营销