一般来说,如果你接入或授权了第三方系统,那么在对方系统都自带有自定义菜单生成功能。如果由于其他原因,导致自定义菜单失效或无法生成自定义菜单,可通过本工具自助生成,需要注意的是,第三方开发生成自定义菜单需要您的微信已经通过微信认证,否则只能在微信后台编辑自定义菜单。
微信自定义菜单生成器:http://user.tianapi.com/weixin/debug/menu/
使用在线生成自定义菜单功能,需要填入如下两个参数,用于提交菜单数据时校对权限。本系统不会保存这些参数,自定义菜单生成后,你可以重置应用密钥,不会导致失效,下次修改菜单,只需继续需要AppID和新的应用密匙即可。
AppID:应用ID,微信公众后台-基本配置-开发者ID-AppID
应用密钥:微信公众后台-基本配置-开发者ID-AppSecret
菜单结构如下, 自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。
{ "button": [ { "name": "点击事件", //一级菜单 "sub_button": [ { "type": "click", //关键词触发类型 "name": "社会新闻", //菜单显示的名称 "key": "社会新闻" //菜单值,如后台事件配合 }, { "type": "view", //URL跳转类型 "name": "百度一下", //菜单显示的名称 "url": "http://m.baidu.com/" //点击后跳转的地址 }, { "type": "click", "name": "关于我们", "key": "帮助" } ] }, { "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": [ { "type": "scancode_waitmsg", //扫描二维码类型 "name": "扫码带提示", "key": "rselfmenu_0_0" }, { "type": "scancode_push", "name": "扫码推事件", "key": "rselfmenu_0_1" }, { "name": "发送位置", "type": "location_select", //发送地址位置类型 "key": "rselfmenu_2_0" } ] ] }
开发自定义菜单提交菜单数据PHP代码:
<?php /** * 天行微信API开发学习系统 * @version 1.3 * Modified at 2015/06/03 20:25 */ header("Content-type:text/html;charset=utf-8"); session_start(); if(isset($_POST['appid']) && isset($_POST['appsecret'])){ //判断参数是否为空 $appid = $_POST['appid']; //微信开发者中心你的appid $secret = $_POST['appsecret']; //微信开发者中心你的secret $url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}"; if(!isset($_SESSION['access_token']) || empty($_SESSION['access_token']) || ($_SESSION['get_time']+$_SESSION['expires_time']) < time()){ //获取token和有效期 $result = curl::https_request($url); $data = json_decode($result,true); $_SESSION['expires_time'] = $data['expires_in']; $_SESSION['get_time'] = time(); $_SESSION['access_token'] = $data['access_token']; } // 创建自定义菜单 $uri = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token={$_SESSION['access_token']}"; //一级最多3个,二级最多5个,以下是举例,可自由编辑添加 $menu_data = $_POST['customermenu']; //form表单textarea输入框绑定的ID $menucot = curl::https_request($uri,$menu_data); //发送菜单数据 } //参数为空则跳过 /* CURL发送请求 */ class curl{ public static function https_request($url, $data = null) { $ch = curl_init(); // 创建一个新cURL资源 curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); if(!empty($data)){ curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // 传递post数据 } $returnTransfer = curl_exec($ch); curl_close($ch); return $returnTransfer; } }; ?>
1. 通过本工具,可以生成所有类型的微信公众号自定义菜单,也可用于排查问题。
2. 自定义菜单结构,所提交的是微信自定义菜单的原始JSON数据,请参照默认结构照葫芦画瓢增删改,每次提交后会覆盖前一次的菜单。
3. 点击生成菜单后,因为微信一般会缓存几个小时,建议先取消在重新关注,就可以立即看到效果。
4. 自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。
5. 自定义菜单结构,自定义菜单内容是保存在微信服务器上的。
6. 本系统不会缓存任何AppID、AppSecret数据,在您点击生成菜单时用于验证。
8. 任何您还是担心AppID数据会泄露,那么建议在您生成菜单后登录微信后台点击-基本配置-开发者ID-重置应用密匙即可。
9. 特别注意菜单结构中的菜单类型:
"type": "click",click表示点击触发事件类型。name为显示的菜单名称可随便填写,key是菜单触发对应的值,一般与后台相对应。
"type": "view",view表示链接类型,name同上,url是菜单点击后跳转的网址其他类型的菜单请参照默认类型,或阅读微信官方开发文档中关于自定义菜单的解释
10.如果提交后返回错误,请参考如下微信自定义菜单错误状态提示码参照表