From 95742fda2fdbd4bf3c52defeb7e81aeb8d9a3ec1 Mon Sep 17 00:00:00 2001 From: fanbo <3412853751@qq.com> Date: Mon, 23 Dec 2024 20:38:41 +0800 Subject: [PATCH] =?UTF-8?q?menu.lib.php=E7=9A=84=E6=B3=A8=E9=87=8A?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/fanbo/media.lib.php | 17 -------- core/fanbo/menu.lib.php | 62 ----------------------------- core/fanbo/msg.lib.php | 19 --------- core/fanbo/msgconstant.lib.php | 20 ---------- core/menu.lib.php | 71 ++++++++++++++++++++++++++++++---- 5 files changed, 63 insertions(+), 126 deletions(-) delete mode 100644 core/fanbo/media.lib.php delete mode 100644 core/fanbo/menu.lib.php delete mode 100644 core/fanbo/msg.lib.php delete mode 100644 core/fanbo/msgconstant.lib.php diff --git a/core/fanbo/media.lib.php b/core/fanbo/media.lib.php deleted file mode 100644 index 0e862c3..0000000 --- a/core/fanbo/media.lib.php +++ /dev/null @@ -1,17 +0,0 @@ - '@' . $filename); - return Curl::callWebServer($queryUrl, $data, 'POST', 1, 0); - } - - public static function download($mediaId) { - $accessToken = AccessToken::getAccessToken(); - $queryUrl = 'http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=' . $accessToken . '&media_id=' . $mediaId; - return Curl::callWebServer($queryUrl, '', 'GET', 0); - } -} \ No newline at end of file diff --git a/core/fanbo/menu.lib.php b/core/fanbo/menu.lib.php deleted file mode 100644 index 799c66a..0000000 --- a/core/fanbo/menu.lib.php +++ /dev/null @@ -1,62 +0,0 @@ -$menu){ - foreach($menuList2 as $k=>$menu2){ - if($menu['id'] == $menu2['pid']){ - $menuList[$key]['sub_button'][] = $menu2; - unset($menuList[$k]); - } - } - } - foreach($menuList as $key=>$menu){ - if($menu['type'] == 'view'){ - $menuList[$key]['url'] = urlencode($menu['code']); - }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'], $menuList[$key]['id'], $menuList[$key]['pid']); - $menuList[$key]['name'] = urlencode($menu['name']); - if(isset($menu['sub_button'])){ - unset($menuList[$key]['type']); - foreach($menu['sub_button'] as $k=>$son){ - if($son['type'] == 'view'){ - $menuList[$key]['sub_button'][$k]['url'] = urlencode($son['code']); - }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'], $menuList[$key]['sub_button'][$k]['id'], $menuList[$key]['sub_button'][$k]['pid']); - $menuList[$key]['sub_button'][$k]['name'] = urlencode($son['name']); - } - } - } - $data = array('button' => array_values($menuList)); - $data = json_encode($data); - $data = urldecode($data); - $accessToken = AccessToken::getAccessToken(); - $url = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$accessToken; - $result = Curl::callWebServer($url, $data, 'POST'); - return $result['errcode'] == 0 ? true : $result; - } - - public static function getMenu(){ - $accessToken = AccessToken::getAccessToken(); - $url = 'https://api.weixin.qq.com/cgi-bin/menu/get?access_token='.$accessToken; - return Curl::callWebServer($url, '', 'GET'); - } - - public static function delMenu(){ - $accessToken = AccessToken::getAccessToken(); - $url = 'https://api.weixin.qq.com/cgi-bin/menu/delete?access_token='.$accessToken; - return Curl::callWebServer($url, '', 'GET'); - } -} \ No newline at end of file diff --git a/core/fanbo/msg.lib.php b/core/fanbo/msg.lib.php deleted file mode 100644 index 8fdf508..0000000 --- a/core/fanbo/msg.lib.php +++ /dev/null @@ -1,19 +0,0 @@ - $code); - if (!empty($errorMsg)) { - $returnMsg['custom_msg'] = $errorMsg; - } - $returnMsg['custom_msg'] = '出错啦!'.$returnMsg['custom_msg']; - exit($returnMsg['custom_msg']); - } -} -?> diff --git a/core/fanbo/msgconstant.lib.php b/core/fanbo/msgconstant.lib.php deleted file mode 100644 index 0025dc5..0000000 --- a/core/fanbo/msgconstant.lib.php +++ /dev/null @@ -1,20 +0,0 @@ -'', '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:弹出地理位置选择器,用户点击按钮后,微信客户端将调起地理位置选择工具,完成选择操作后,将选择的地理位置发送给开发者的服务器,同时收起位置选择工具,随后可能会收到开发者下发的消息。 + * + * @return bool + */ public static function setMenu($menuList){ + //树形排布,将一维数组转换为树形结构,以支持子菜单 $menuList2 = $menuList; foreach($menuList as $key=>$menu){ foreach($menuList2 as $k=>$menu2){ + // 如果当前菜单是另一个菜单的子菜单,则添加到父菜单的sub_button中 if($menu['id'] == $menu2['pid']){ $menuList[$key]['sub_button'][] = $menu2; + // 从数组中移除已经添加为子菜单的项 unset($menuList[$k]); } } } + //处理数据,遍历菜单数组,处理每个菜单项的详细信息 foreach($menuList as $key=>$menu){ + // 根据菜单类型处理type和code if($menu['type'] == 'view'){ + // 对于view类型的菜单,将code值作为URL $menuList[$key]['url'] = urlencode($menu['code']); + //处理URL。因为URL不能在转换JSON时被转为UNICODE }else if($menu['type'] == 'click'){ + // 对于click类型的菜单,将code值作为key $menuList[$key]['key'] = $menu['code']; }else if(!empty($menu['type'])){ + // 对于其他类型的菜单,将code值作为key,并初始化sub_button数组 $menuList[$key]['key'] = $menu['code']; if(!isset($menu['sub_button'])) $menuList[$key]['sub_button'] = array(); - } + }// 移除不需要的code字段 unset($menuList[$key]['code'], $menuList[$key]['id'], $menuList[$key]['pid']); + //处理PID和ID,移除不需要的id和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'] = urlencode($son['code']); + // 对子菜单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(); } + // 移除不需要的code字段 unset($menuList[$key]['sub_button'][$k]['code'], $menuList[$key]['sub_button'][$k]['id'], $menuList[$key]['sub_button'][$k]['pid']); + // 移除不需要的id和pid字段 + //处理名字。因为汉字不能在转换JSON时被转为UNICODE $menuList[$key]['sub_button'][$k]['name'] = urlencode($son['name']); } } } - $data = array('button' => array_values($menuList)); - $data = json_encode($data); - $data = urldecode($data); + // 整理数据格式,准备发送到微信服务器 + $data = array('button' => array_values($menuList));// 重置数组索引 + $data = json_encode($data);// 将数组转换为JSON字符串 + $data = urldecode($data);// 对JSON字符串进行解码,以确保中文字符不会被转换成Unicode字符 + // 获取微信ACCESS_TOKEN $accessToken = AccessToken::getAccessToken(); $url = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$accessToken; + // 发起POST请求,将菜单数据发送到微信服务器 $result = Curl::callWebServer($url, $data, 'POST'); - return $result['errcode'] == 0 ? true : $result; - } - + return $result['errcode'] == 0 ? true : $result;// 如果微信服务器返回errcode为0,表示菜单创建成功 + }// 返回微信服务器返回的结果 +/** + * 获取微信菜单 + * 此方法用于从微信服务器获取当前公众号的自定义菜单 + * + * @return bool|mixed 获取成功返回菜单信息,失败返回错误信息 + */ public static function getMenu(){ + // 获取微信ACCESS_TOKEN $accessToken = AccessToken::getAccessToken(); $url = 'https://api.weixin.qq.com/cgi-bin/menu/get?access_token='.$accessToken; + // 发起GET请求,从微信服务器获取菜单信息 return Curl::callWebServer($url, '', 'GET'); } - +/** + * 删除微信菜单 + * 此方法用于删除当前公众号的自定义菜单 + * + * @return bool|mixed 删除成功返回{"errcode":0,"errmsg":"ok"},失败返回错误信息 + */ public static function delMenu(){ + // 获取微信ACCESS_TOKEN $accessToken = AccessToken::getAccessToken(); $url = 'https://api.weixin.qq.com/cgi-bin/menu/delete?access_token='.$accessToken; + // 发起GET请求,删除微信服务器上的自定义菜单 return Curl::callWebServer($url, '', 'GET'); } } \ No newline at end of file