创建菜单的接口如下。
https:// api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
创建菜单时,需要将菜单内容组织成如下结构,以POST的方式向微信服务器提交。
{
"button": [
{
"name": "扫码",
"sub_button": [
{
"type": "scancode_waitmsg",
"name": "扫码带提示",
"key": "rselfmenu_0_0"
},
{
"type": "scancode_push",
"name": "扫码推事件",
"key": "rselfmenu_0_1"
}
]
},
{
"name": "发图",
"sub_button": [
{
"type": "pic_sysphoto",
"name": "系统拍照发图",
"key": "rselfmenu_1_0"
},
{
"type": "pic_photo_or_album",
"name": "拍照或者相册发图",
"key": "rselfmenu_1_1"
},
{
"type": "pic_weixin",
"name": "微信相册发图",
"key": "rselfmenu_1_2"
}
]
},
{
"name": "其他",
"sub_button": [
{
"name": "发送位置",
"type": "location_select",
"key": "rselfmenu_2_0"
},
{
"type": "click",
"name": "今日歌曲",
"key": "V1001_TODAY_MUSIC"
},
{
"type": "view",
"name": "搜索",
"url": "http:// www.soso.com/"
}
]
}
]
}
自定义菜单内容的参数说明如表5-3所示。
表5-3 自定义菜单参数说明
为微信公众号创建自定义菜单的代码实现如下。
$jsonmenu = '{
"button": [
{
"name": "扫码",
"sub_button": [
{
"type": "scancode_waitmsg",
"name": "扫码带提示",
"key": "rselfmenu_0_0"
},
{
"type": "scancode_push",
"name": "扫码推事件",
"key": "rselfmenu_0_1"
}
]
},
{
"name": "发图",
"sub_button": [
{
"type": "pic_sysphoto",
"name": "系统拍照发图",
"key": "rselfmenu_1_0"
},
{
"type": "pic_photo_or_album",
"name": "拍照或者相册发图",
"key": "rselfmenu_1_1"
},
{
"type": "pic_weixin",
"name": "微信相册发图",
"key": "rselfmenu_1_2"
}
]
},
{
"name": "其他",
"sub_button": [
{
"name": "发送位置",
"type": "location_select",
"key": "rselfmenu_2_0"
},
{
"type": "click",
"name": "今日歌曲",
"key": "V1001_TODAY_MUSIC"
},
{
"type": "view",
"name": "搜索",
"url": "http:// www.soso.com/"
}
]
}
]
}
';
$url = "https:// api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token;
$result = https_request($url, $jsonmenu);
var_dump($result);
function https_request($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;
}
正确时返回的JSON数据包如下。
{"errcode":0,"errmsg":"ok"}
错误时返回的JSON数据包如下(示例为无效菜单名长度)。
{"errcode":40018,"errmsg":"invalid button name size"}
其中,errcode为全局返回码。