微信公众平台开发(75)自定义菜单

 

自定义菜单

 自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的功能。

目前新申请的账号只有服务号才能申请自定义菜单。开启自定义菜单后,公众号界面如图所示:

目前自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。请注意,创建自定义菜单后,由于微信客户端缓存,需要24小时微信客户端才会展现出来。

 

按钮类型

目前自定义菜单接口可实现两种类型按钮,如下:

click

用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互;

view

用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的url (即网页链接),达到打开网页的目的,建议与网页授权获取用户基本信息接口结合,获得用户的登入个人信息。

 

创建菜单

请求方式

POST(请使用https协议)https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

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

参数说明

参数

是否必须

说明

button

一级菜单数组,个数应为1~3

sub_button

二级菜单数组,个数应为1~5

type

菜单的响应动作类型,目前有clickview两种类型

name

菜单标题,不超过16个字节,子菜单不超过40个字节

key

click类型必须

菜单KEY值,用于消息接口推送,不超过128字节

url

view类型必须

网页链接,用户点击菜单可打开链接,不超过256字节

返回结果

正确时的返回JSON数据包如下:

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

错误时的返回JSON数据包如下(示例为无效菜单名长度):

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

代码实现

$jsonmenu = '
{
     "button":[
     {    
          "type":"click",
          "name":"今日歌曲",
          "key":"V1001_TODAY_MUSIC"
      },
      {
           "type":"click",
           "name":"歌手简介",
           "key":"V1001_TODAY_SINGER"
      },
      {
           "name":"菜单",
           "sub_button":[
           {    
               "type":"view",
               "name":"搜索",
               "url":"http://www.soso.com/"
            },
            {
               "type":"view",
               "name":"视频",
               "url":"http://v.qq.com/"
            },
            {
               "type":"click",
               "name":"赞一下我们",
               "key":"V1001_GOOD"
            }]
       }]
 }
';
 
$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token;
$result = https_post($url, $jsonmenu);
var_dump($result);
 
function https_post($url, $data = null){
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    if (!empty($data)){
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);
    return$output;
}
 

查询菜单

使用接口创建自定义菜单后,开发者还可使用接口查询自定义菜单的结构。

请求说明

http请求方式:GET

https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN

删除菜单

使用接口创建自定义菜单后,开发者还可使用接口删除当前使用的自定义菜单。

请求说明

http请求方式:GET

https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN

 

菜单事件推送

用户点击自定义菜单后,如果菜单按钮类型为click,则微信公众平台会把此次点击事件推送给接口程序;按钮类型为view的菜单点击后不会上报,而是直接跳转到对应的URL。

使用接口创建自定义菜单后,开发者还可使用接口删除当前使用的自定义菜单。

XML数据包示例:

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[CLICK]]></Event>
<EventKey><![CDATA[EVENTKEY]]></EventKey>
</xml>

参数说明:

参数

描述

ToUserName

接收方微信号

FromUserName

发送方帐号(一个OpenID

CreateTime

消息创建时间 (整型)

MsgType

消息类型,event

Event

事件类型,CLICK

EventKey

事件KEY值,与自定义菜单接口中KEY值对应

代码实现

privatefunction receiveEvent($object)
{
    $contentStr = "";
    switch ($object->Event)
    {
        case "subscribe":
            $contentStr[] = array("Title" =>"欢迎关注方倍工作室", 
            "Description" =>"点击图片关注或者微信搜索方倍工作室", 
            "PicUrl" =>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", 
            "Url" =>"weixin://addfriend/pondbaystudio");
        case "unsubscribe":
            break;
        case "CLICK":
            switch ($object->EventKey)
            {
                case "company":
                    $contentStr[] = array("Title" =>"公司简介", 
                    "Description" =>"方倍工作室提供移动互联网相关的产品及服务", 
                    "PicUrl" =>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", 
                    "Url" =>"weixin://addfriend/pondbaystudio");
                    break;
                default:
                    $contentStr[] = array("Title" =>"默认菜单回复", 
                    "Description" =>"您正在使用的是方倍工作室的自定义菜单测试接口", 
                    "PicUrl" =>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", 
                    "Url" =>"weixin://addfriend/pondbaystudio");
                    break;
            }
            break;
        default:
            break;      
 
   }
    return$contentStr;
}

 

posted on 2013-12-24 21:02  岚之山  阅读(237)  评论(0编辑  收藏  举报

导航