频道栏目
读书频道 > 移动开发 > 其他综合 > 微信公众平台应用开发实战
2.5.2 自定义菜单的创建
2013-10-01 09:21:10     我来说两句
收藏   我要投稿
全书一共9章,在逻辑上分为四大部分:第一部分(第1章)介绍了微信公众平台的开发模式、数据交互方式,以及开发公众平台应用所需要的各项技术;第二部分(第2~4章)首先详细讲解了微信公众平台开放的所有API的功  立即去当当网订购

创建菜单的接口地址是: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":"click",
               "name":"hello word",
               "key":"V1001_HELLO_WORLD"
            },
            {
               "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" => "click",
                "name" => "hello word",
                "key" => "V1001_HELLO_WORLD"
                        ),
                        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字节

请求成功后得到的返回字符串如下:
{"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 不合法的自定义菜单使用用户
41001 缺少access_token参数
41002 缺少appid参数
41003 缺少refresh_token参数
41004 缺少secret参数
41005 缺少多媒体文件数据
41006 缺少media_id参数
41007 缺少子菜单数据
42001 access_token超时
43001 需要GET请求
43002 需要POST请求
43003 需要HTTPS请求
44001 多媒体文件为空
44002 POST的数据包为空
44003 图文消息内容为空
45001 多媒体文件大小超过限制
45002 消息内容超过限制
45003 标题字段超过限制
45004 描述字段超过限制
45005 链接字段超过限制
45006 图片链接字段超过限制
45007 语音播放时间超过限制
45008 图文消息超过限制
45009 接口调用超过限制
45010 创建菜单个数超过限制
46001 不存在媒体数据
46002 不存在的菜单版本
46003 不存在的菜单数据
47001 解析JSON/XML内容错误

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

 

菜单创建成功之后,当用户单击任意的一个菜单时,公众账号后台会收到一个事件推送信息,消息的中的Event为“CLICK”,EventKey为菜单定义中对应的KEY值。在创建完自定义菜单之后,用户的微信并不能立即看到这些菜单,需要大概一天的时间之后才会展现出来。这是因为微信客户端的缓存过期时间是24小时。但是我们测试自己的程序不可能等这么长时间,一个好办法是先取消关注自己的公众账号,重启微信,然后重新关注。这样微信会立即重新拉一次最新的自定义菜单数据并做展现。

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:2.5.1 获取凭证的方法
下一篇:2.5.3 自定义菜单的获取
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站