$v) { $hasChild = isset($v['sublist']) && $v['sublist'] ? true : false; $data = array_intersect_key($v, $allow); $data['ismenu'] = isset($data['ismenu']) ? $data['ismenu'] : ($hasChild ? 1 : 0); $data['icon'] = isset($data['icon']) ? $data['icon'] : ($hasChild ? 'fa fa-list' : 'fa fa-circle-o'); $data['pid'] = $pid; $data['status'] = 'normal'; try { $menu = AuthRule::create($data); if ($hasChild) { self::create($v['sublist'], $menu->id); } } catch (PDOException $e) { throw new Exception($e->getMessage()); } } } /** * 删除菜单 * @param string $name 规则name * @return boolean */ public static function delete($name) { $menu = AuthRule::getByName($name); if ($menu) { // 必须将结果集转换为数组 $ruleList = collection(model('AuthRule')->order('weigh', 'desc')->field('id,pid,name')->select())->toArray(); // 构造菜单数据 $ids = Tree::instance()->init($ruleList)->getChildrenIds($menu['id'], true); if ($ids) { AuthRule::destroy($ids); } return true; } return false; } /** * @param $adminId * @param $find 要替换的字符串 * @param $replace 替换成这个 * @param $type type=0,业务域名变成入口域名,type=1 入口域名改成业务域名 ,type=3 入口域名变入口域名 * return $return['errCode'] errCode=0 成功 */ public static function changeMenu($adminId,$find,$replace,$type=0){ $returnArr = []; $returnArr['errCode'] = 0; $returnArr['msg'] = ''; $adminConfig = model('AdminConfig')->getAdminInfoAll($adminId); if(empty($adminConfig['wx_menu'])){ //如果是微信菜单是空的 $returnArr['errCode'] = 0; $returnArr['msg'] = '该用户微信菜单是空的'; return $returnArr; } //替换关键字 $adminConfig['wx_menu'] = json_encode($adminConfig['wx_menu'],JSON_UNESCAPED_UNICODE); if(!strpos($adminConfig['wx_menu'],$find)){ Log::info(date('Y-m-d H:i:s') . "微信菜单创建 admin_id:{$adminConfig['admin_id']} 无匹配字符"); $returnArr['errCode'] = 0; $returnArr['msg'] = '匹配不到要替换的字符'; return $returnArr; } if($type){ $adminConfig['wx_menu'] = str_replace($find,$replace,$adminConfig['wx_menu']); $adminConfig['wx_menu'] = json_decode($adminConfig['wx_menu'],true); }else{ $menu = json_decode($adminConfig['wx_menu'],true); foreach($menu as $key => $val){ if(isset($val['url'])){ if(strpos($val['url'],'?') > -1) { $menu[$key]['url'] = str_replace($find, $replace,explode('?',$val['url'])[0]); $menu[$key]['url'] = $menu[$key]['url'].'?channel_id='.$adminId; }else{ $menu[$key]['url'] = $val['url'].'?channel_id='.$adminId; } } if(isset($val['sub_button']) && !empty($val['sub_button'])){ foreach($val['sub_button'] as $sub_k => $sub_v){ if(isset($sub_v['url'])){ if(strpos($sub_v['url'],'?') > -1){ $menu[$key]['sub_button'][$sub_k]['url'] = str_replace($find, $replace,explode('?',$sub_v['url'])[0]); $menu[$key]['sub_button'][$sub_k]['url'] = $menu[$key]['sub_button'][$sub_k]['url'].'?channel_id='.$adminId; }else{ $menu[$key]['sub_button'][$sub_k]['url'] = $sub_v['url'].'?channel_id='.$adminId; } } } } } $adminConfig['wx_menu'] = $menu; } try { $wechat = new WeChatObject($adminConfig); $officialAccount = $wechat->getOfficialAccount(); $ret = $officialAccount->menu->create($adminConfig['wx_menu']); if ($ret['errcode'] == 0) { Log::info(date('Y-m-d H:i:s') . "微信菜单创建 admin_id:{$adminConfig['admin_id']} 完成"); //更新数据 $update = model('AdminConfig')->update(['wx_menu' => $adminConfig['wx_menu']], ["admin_id" => $adminConfig['admin_id']]); if ($update) { Log::info(date('Y-m-d H:i:s') . "替换wx_menu admin_id:{$adminConfig['admin_id']} 更新成功"); return $returnArr; } else { $returnArr['errCode'] = 4; $returnArr['msg'] = '替换微信菜单更新失败'; Log::error(date('Y-m-d H:i:s') . "替换wx_menu admin_id:{$adminConfig['admin_id']} 更新失败"); return $returnArr; } } else { $returnArr['errCode'] = 3; $returnArr['msg'] = '微信菜单创建失败'; Log::error(date('Y-m-d H:i:s') . "微信菜单创建 admin_id:{$adminConfig['admin_id']} 失败 " . $ret['errmsg']); return $returnArr; } }catch (\Exception $exception){ Log::error(date('Y-m-d H:i:s') . "微信菜单创建 admin_id:{$adminConfig['admin_id']} 失败 触发异常:" . $exception->getMessage()); return ['errCode'=>10,'msg'=>'微信菜单创建失败,触发异常']; } } }