自定义菜单

3.0 的菜单组件有所简化,相比 2.x 版本变化如下:

  • 去除 MenuItem 类,创建菜单直接使用数组不再支持 callbackMenuItem 类似的繁杂的方式
  • set() 方法与 addConditional() 合并为一个方法 add()
  • get() 改名为 all()
  • delete()deleteById() 合并为 destroy()
  • 所有 API 的返回值(非调用失败情况)均为官方文档原样返回(Collection形式),不再取返回值中部分 key 返回。

    例如原来的 get() 方法,官方返回的数组为: { menu: [...]},SDK 取了其中的 menu 内容作为返回值,在 3.0 后将直接整体返回。

获取菜单模块实例

  1. <?php
  2. use EasyWeChat\Foundation\Application;
  3. // ...
  4. $app = new Application($options);
  5. $menu = $app->menu;

API 列表

读取(查询)已设置菜单

微信的菜单读取有两个不同的方式:

一种叫 查询菜单,在 SDK 中以 all() 方法来调用:

  1. $menus = $menu->all();

另外一种叫 获取自定义菜单,使用 current() 方法来调用:

  1. $menus = $menu->current();

添加菜单

添加普通菜单

  1. $buttons = [
  2. [
  3. "type" => "click",
  4. "name" => "今日歌曲",
  5. "key" => "V1001_TODAY_MUSIC"
  6. ],
  7. [
  8. "name" => "菜单",
  9. "sub_button" => [
  10. [
  11. "type" => "view",
  12. "name" => "搜索",
  13. "url" => "http://www.soso.com/"
  14. ],
  15. [
  16. "type" => "view",
  17. "name" => "视频",
  18. "url" => "http://v.qq.com/"
  19. ],
  20. [
  21. "type" => "click",
  22. "name" => "赞一下我们",
  23. "key" => "V1001_GOOD"
  24. ],
  25. ],
  26. ],
  27. ];
  28. $menu->add($buttons);

以上将会创建一个普通菜单。

添加个性化菜单

与创建普通菜单不同的是,需要在 add() 方法中将个性化匹配规则作为第二个参数传进去:

  1. $buttons = [
  2. // ...
  3. ];
  4. $matchRule = [
  5. "tag_id" => "2",
  6. "sex" => "1",
  7. "country" => "中国",
  8. "province" => "广东",
  9. "city" => "广州",
  10. "client_platform_type" => "2",
  11. "language" => "zh_CN"
  12. ];
  13. $menu->add($buttons, $matchRule);

删除菜单

有两种删除方式,一种是全部删除,另外一种是根据菜单 ID 来删除(删除个性化菜单时用,ID 从查询接口获取):

  1. $menu->destroy(); // 全部
  2. $menu->destroy($menuId);

测试个性化菜单

  1. $menus = $menu->test($userId);

$userId 可以是粉丝的 OpenID,也可以是粉丝的微信号。

返回 $menus 与指定的 $userId 匹配的菜单项。

更多关于微信自定义菜单 API 请参考: http://mp.weixin.qq.com/wiki 自定义菜单 章节。