diff --git a/自定义菜单.md b/自定义菜单.md index ea82027..740a81b 100644 --- a/自定义菜单.md +++ b/自定义菜单.md @@ -1,39 +1,99 @@ - ```php +# 自定义菜单 + +```php $wechat->menu; - ``` +``` -+ `$menu->get();` 读取菜单 -+ `$menu->set($menus);` 设置菜单 -+ `$menu->delete();` 删除菜单 +自定义菜单功能的使用场景:你自己做了网站后台,想要管理某个公众号的菜单,在后台填写表单后,经由 SDK 请求微信的服务器完成菜单设定。 -> 注意:菜单设置后不会在微信上立马看到 +## 概念 + +#### 菜单项 MenuItem + +菜单的组成单位,分为一级与二级,一个微信菜单包含最多3个一级菜单项。一个一级菜单项可以包含最多5个二级菜单项。 + + +## 注意事项 + +目前自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。请注意,创建自定义菜单后,由于微信客户端缓存,需要24小时微信客户端才会展现出来。建议测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。 + +点击后展开更多菜单, + ++ `array $menu->get();` 读取菜单 ++ `boolean $menu->set(array $menus);` 设置菜单,参数为一个包含最多三个一级菜单项的数组 ++ `boolean $menu->delete();` 删除菜单 ++ `MenuItem $menu->make($name, $type = null, $key = null)` 创建一个菜单项 + - `$name` 菜单项名称,比如:`今日歌曲` + - `$type` 菜单项类型,比如:`view`,`click`等,更多请参考 http://mp.weixin.qq.com/wiki `自定义菜单` 章节。 + - `$key` 菜单项的值,当 `$type` 为 `view` 时为目标 URL,其它为自定义 key。 + +一个菜单项可以使用 `buttons` 方法传入一个菜单项数组创建二级菜单项: + +`` + +> 注意:由于微信客户端缓存,需要24小时微信客户端才会展现出来。建议测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。 example: ```php use Overtrue\Wechat\Services\Menu; +$menus = array( + Menu::click("今日歌曲")->key('V1001_TODAY_MUSIC'), + Menu::make("菜单")->buttons(array( + Menu::view('搜索', 'http://www.soso.com/'), + Menu::view('视频', 'http://v.qq.com/'), + Menu::click('赞一下我们', 'V1001_GOOD'), + )), + ); + +try { + Menu::set($menus);// 请求微信服务器 + echo '设置成功!'; +} catch (\Exception $e) { + echo '设置失败:' . $e->getMessage(); +} + +``` + +如果你不想引入`Overtrue\Wechat\Services\Menu` 命名空间,也可以通过 + +`$wechat->menu->make($name, $type = null, $key = null)` + +来创建,比如上面示例也可以写成: + +```php $wechat->menu->set(array( - Menu::click("今日歌曲")->key('V1001_TODAY_MUSIC'), - Menu::make("菜单")->buttons(array( - Menu::view('搜索', 'http://www.soso.com/'), - Menu::view('视频', 'http://v.qq.com/'), - Menu::click('赞一下我们', 'V1001_GOOD'), + $wechat->menu->make('今日歌曲', 'click', 'V1001_TODAY_MUSIC'), + $wechat->menu->make('菜单')->buttons(array( + $wechat->menu->make('搜索', 'view', 'http://www.soso.com/'), + $wechat->menu->make('视频', 'view', 'http://v.qq.com/'), + $wechat->menu->make('赞一下我们', 'click', 'V1001_GOOD'), )), )); ``` -如果你不想引入`Overtrue\Wechat\Services\Menu` 命名空间,也可以通过`$wechat->menu->make($name, $type, $propery)` 来创建,比如上面示例也可以写成: +### 创建子菜单 + +`$wechat->menu->make()` 方法以及 `$wechat->menu->click()` 或者 `$wechat->menu->view()` 返回的对象均为 `Overtrue\Wechat\Services\MenuItem` 对象,`MenuItem` 对象有一个方法 `buttons(array $items)` 指定**二级菜单**(子菜单)。 ```php -$wechat->menu->set(array( - $wechat->menu->click("今日歌曲")->key('V1001_TODAY_MUSIC'), - $wechat->menu->make("菜单")->buttons(array( - $wechat->menu->view('搜索', 'http://www.soso.com/'), - $wechat->menu->view('视频', 'http://v.qq.com/'), - $wechat->menu->click('赞一下我们', 'V1001_GOOD'), - )), -)); +$wechat->menu->make('菜单')->buttons(array( + $wechat->menu->make('搜索', 'view', 'http://www.soso.com/'), + $wechat->menu->make('视频', 'view', 'http://v.qq.com/'), + $wechat->menu->make('赞一下我们', 'click', 'V1001_GOOD'), + )); + + +``` + +以上就会构成以下样子的菜单: + +``` +菜单 + 搜索 + 视频 + 赞一下我们 ``` 但是这样看起来似乎没有那么直观的感觉。 :laughing: