public static setMenu ( $menuList ) : boolean | ||
$menuList | array( array('id'=>'', 'pid'=>'', 'name'=>'', 'type'=>'', 'code'=>''), array('id'=>'', 'pid'=>'', 'name'=>'', 'type'=>'', 'code'=>''), array('id'=>'', 'pid'=>'', 'name'=>'', 'type'=>'', 'code'=>''), ); 'code'是view类型的URL或者其他类型的key 'type'是菜单类型,如下: 1、click:点击推事件,用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互; 2、view:跳转URL,用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页URL,可与网页授权获取用户基本信息接口结合,获得用户基本信息。 3、scancode_push:扫码推事件,用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后显示扫描结果(如果是URL,将进入URL),且会将扫码的结果传给开发者,开发者可以下发消息。 4、scancode_waitmsg:扫码推事件且弹出“消息接收中”提示框,用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后,将扫码的结果传给开发者,同时收起扫一扫工具,然后弹出“消息接收中”提示框,随后可能会收到开发者下发的消息。 5、pic_sysphoto:弹出系统拍照发图,用户点击按钮后,微信客户端将调起系统相机,完成拍照操作后,会将拍摄的相片发送给开发者,并推送事件给开发者,同时收起系统相机,随后可能会收到开发者下发的消息。 6、pic_photo_or_album:弹出拍照或者相册发图,用户点击按钮后,微信客户端将弹出选择器供用户选择“拍照”或者“从手机相册选择”。用户选择后即走其他两种流程。 7、pic_weixin:弹出微信相册发图器,用户点击按钮后,微信客户端将调起微信相册,完成选择操作后,将选择的相片发送给开发者的服务器,并推送事件给开发者,同时收起相册,随后可能会收到开发者下发的消息。 8、location_select:弹出地理位置选择器,用户点击按钮后,微信客户端将调起地理位置选择工具,完成选择操作后,将选择的地理位置发送给开发者的服务器,同时收起位置选择工具,随后可能会收到开发者下发的消息。 | |
Результат | boolean |
public static function setMenu($menuList)
{
//树形排布
$menuList2 = $menuList;
foreach ($menuList as $key => $menu) {
foreach ($menuList2 as $k => $menu2) {
if ($menu['id'] == $menu2['pid']) {
$menuList[$key]['sub_button'][] = $menu2;
unset($menuList[$k]);
}
}
}
//处理数据
foreach ($menuList as $key => $menu) {
//处理type和code
if (@$menu['type'] == 'view') {
$menuList[$key]['url'] = $menu['code'];
//处理URL。因为URL不能在转换JSON时被转为UNICODE
$menuList[$key]['url'] = urlencode($menuList[$key]['url']);
} else {
if (@$menu['type'] == 'click') {
$menuList[$key]['key'] = $menu['code'];
} else {
if (@(!empty($menu['type']))) {
$menuList[$key]['key'] = $menu['code'];
if (!isset($menu['sub_button'])) {
$menuList[$key]['sub_button'] = array();
}
}
}
}
unset($menuList[$key]['code']);
//处理PID和ID
unset($menuList[$key]['id']);
unset($menuList[$key]['pid']);
//处理名字。因为汉字不能在转换JSON时被转为UNICODE
$menuList[$key]['name'] = urlencode($menu['name']);
//处理子类菜单
if (isset($menu['sub_button'])) {
unset($menuList[$key]['type']);
foreach ($menu['sub_button'] as $k => $son) {
//处理type和code
if ($son['type'] == 'view') {
$menuList[$key]['sub_button'][$k]['url'] = $son['code'];
$menuList[$key]['sub_button'][$k]['url'] = urlencode($menuList[$key]['sub_button'][$k]['url']);
} else {
if ($son['type'] == 'click') {
$menuList[$key]['sub_button'][$k]['key'] = $son['code'];
} else {
$menuList[$key]['sub_button'][$k]['key'] = $son['code'];
$menuList[$key]['sub_button'][$k]['sub_button'] = array();
}
}
unset($menuList[$key]['sub_button'][$k]['code']);
//处理PID和ID
unset($menuList[$key]['sub_button'][$k]['id']);
unset($menuList[$key]['sub_button'][$k]['pid']);
//处理名字。因为汉字不能在转换JSON时被转为UNICODE
$menuList[$key]['sub_button'][$k]['name'] = urlencode($son['name']);
}
}
}
//整理格式
$data = array();
$menuList = array_values($menuList);
$data['button'] = $menuList;
//转换成JSON
$data = json_encode($data);
$data = urldecode($data);
//获取ACCESS_TOKEN
$accessToken = AccessToken::getAccessToken();
$url = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token=' . $accessToken;
$result = Curl::callWebServer($url, $data, 'POST');
if ($result['errcode'] == 0) {
return true;
}
return $result;
}
* 公众号可通过下述接口来获取网页授权access_token。 * 如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。 * @param $code getCode()获取的code参数 */ $code = $_GET['code']; \LaneWeChat\Core\WeChatOAuth::getAccessTokenAndOpenId($code); //上传多媒体 \LaneWeChat\Core\Media::upload($filename, $type); //下载多媒体 \LaneWeChat\Core\Media::download($mediaId); /** * 自定义菜单 */ //设置菜单 $menuList = array(array('id' => '1', 'pid' => '', 'name' => '常规', 'type' => '', 'code' => 'key_1'), array('id' => '2', 'pid' => '1', 'name' => '点击', 'type' => 'click', 'code' => 'key_2'), array('id' => '3', 'pid' => '1', 'name' => '浏览', 'type' => 'view', 'code' => 'http://www.lanecn.com'), array('id' => '4', 'pid' => '', 'name' => '扫码', 'type' => '', 'code' => 'key_4'), array('id' => '5', 'pid' => '4', 'name' => '扫码带提示', 'type' => 'scancode_waitmsg', 'code' => 'key_5'), array('id' => '6', 'pid' => '4', 'name' => '扫码推事件', 'type' => 'scancode_push', 'code' => 'key_6'), array('id' => '7', 'pid' => '', 'name' => '发图', 'type' => '', 'code' => 'key_7'), array('id' => '8', 'pid' => '7', 'name' => '系统拍照发图', 'type' => 'pic_sysphoto', 'code' => 'key_8'), array('id' => '9', 'pid' => '7', 'name' => '拍照或者相册发图', 'type' => 'pic_photo_or_album', 'code' => 'key_9'), array('id' => '10', 'pid' => '7', 'name' => '微信相册发图', 'type' => 'pic_weixin', 'code' => 'key_10'), array('id' => '11', 'pid' => '1', 'name' => '发送位置', 'type' => 'location_select', 'code' => 'key_11')); \LaneWeChat\Core\Menu::setMenu($menuList); //获取菜单 \LaneWeChat\Core\Menu::getMenu(); //删除菜单 \LaneWeChat\Core\Menu::delMenu(); /** * 应用一:给粉丝群发发送消息 */ //群发消息 //获取粉丝列表 $fansList = \LaneWeChat\Core\UserManage::getFansList(); //上传图片 $menuId = \LaneWeChat\Core\Media::upload('/var/www/baidu_jgylogo3.jpg', 'image'); if (empty($menuId['media_id'])) { die('error'); }