'json', 'wx_menu' => 'json', 'page_title' => 'json', ]; /** * 关注方式 * @return array */ public function getSubscribeMethodList() { return ['1' => '强制关注', '2' => '引导关注', '3' => '不关注']; } public function getSubscribeMethodTextAttr($value, $data) { $value = $value ? $value : $data['subscribe_method']; $list = $this->getSubscribeMethodList(); return isset($list[$value]) ? $list[$value] : ''; } protected function setAccessTokenEndtimeAttr($value) { return $value && !is_numeric($value) ? strtotime($value) : $value; } /** * 新用户活动状态 * @return array */ public function getNewUserActivityList() { return ['0' => '关闭', '1' => '开启']; } public function getNewUserActivityTextAttr($value, $data) { $value = $value ? $value : $data['new_user_activity']; $list = $this->getNewUserActivityList(); return isset($list[$value]) ? $list[$value] : ''; } /** * 关注方式 * @return array */ public function getPageSexList() { return ['0' => '分男分女', '1' => '仅男频', '2' => '仅女频']; } public function getPageSexTextAttr($value, $data) { $value = $value ? $value : $data['page_sex']; $list = $this->getPageSexList(); return isset($list[$value]) ? $list[$value] : ''; } /* * 渠道商信息(弃用) */ public function getAdminInfo($admin_id) { $redis = Redis::instance(); $key = 'A:' . $admin_id; if ($redis->exists($key)) { return json_decode($redis->get($key), true); } else { $admin_config = model('AdminConfig')->where('admin_id', 'in', $admin_id)->find(); if(!$admin_config){ return []; } $config = $admin_config->toArray(); $commonTitle = []; foreach (collection(ManagePage::all())->toArray() as $value) { $commonTitle[$value['sex']] = $value['name']; } $config['boy'] = $admin_config['page_title']['boy_title'] ? $admin_config['page_title']['boy_title'] : $commonTitle[1]; $config['girl'] = $admin_config['page_title']['girl_title'] ? $admin_config['page_title']['girl_title'] : $commonTitle[2]; $config['recently'] = $admin_config['page_title']['recently_title'] ? $admin_config['page_title']['recently_title'] : '最近阅读'; if(isset($admin_config['page_title']['index_title']) && !empty($admin_config['page_title']['index_title'])){ $config['index_title'] = $admin_config['page_title']['index_title']; }else{ $config['index_title']='首页'; } $config['page_sex'] = isset($admin_config['page_sex']) ? $admin_config['page_sex'] : 0; $redis->setex($key, 86400, json_encode($config, JSON_UNESCAPED_UNICODE)); return $config; } } private $_adminInfo = null; /** * 获取AdminConfig缓存 * @param $admin_id * @return array|false|mixed|\PDOStatement|string|Model */ public function getAdminInfoAll($admin_id){ $modulename = request()->module(); $redis = Redis::instance(); if ($redis->exists(self::CACHE_KEY_ADMIN_INFO.$admin_id) && ($modulename != 'admin' || PHP_SAPI == 'cli')) { if (!empty($this->_adminInfo[$admin_id])) { return $this->_adminInfo[$admin_id]; } //获取缓存里AdminConfig信息 $admin_config = json_decode($redis->get(self::CACHE_KEY_ADMIN_INFO.$admin_id), true); //设置平台信息 $this->setPlatformConfig($admin_config); LogService::info('getadmininfoall_redis_lts:' . $admin_id); $this->_adminInfo[$admin_id] = $admin_config; return $admin_config; } //获取AdminInfo信息 $admin_config = model('AdminConfig')->where('admin_id',$admin_id)->find(); if(!$admin_config){ return []; } //转为数组 $admin_config = $admin_config->toArray(); //获取RefreshToken $admin_config['refresh_token'] = model('Ptoken')->where(['platform_id'=>$admin_config['platform_id'],'admin_id'=>$admin_id])->value('refresh_token'); //获取菜单平台的RefreshToken if($admin_config['menu_platform_id']){ if($admin_config['menu_platform_id'] != $admin_config['platform_id']){ $admin_config['menu_refresh_token'] = model('Ptoken')->where(['platform_id'=>$admin_config['menu_platform_id'],'admin_id'=>$admin_id])->value('refresh_token'); }else{ $admin_config['menu_refresh_token'] = $admin_config['refresh_token']; } } //设置首页展示信息配置 $this->setPageTitleConfig($admin_config); //写到缓存 if($modulename != 'admin'){ $redis->setex(self::CACHE_KEY_ADMIN_INFO.$admin_id, 86400, json_encode($admin_config, JSON_UNESCAPED_UNICODE)); } //设置平台信息 $this->setPlatformConfig($admin_config); //返回数据 $this->_adminInfo[$admin_id] = $admin_config; return $admin_config; } /** * 删除AdminInfo缓存 * @param $admin_id */ public function delAdminInfoAllCache($admin_id,$wx_username=''){ $redis = Redis::instance(); $redis->del(self::CACHE_KEY_ADMIN_INFO.$admin_id); if ($wx_username){ $redis->del('ACOU:'.$wx_username); } } /** * 设置AdminInfo缓存的平台相关信息 * @param $admin_config */ protected function setPlatformConfig(&$admin_config){ //设置平台信息 $admin_config['platform_authhost'] = null; $admin_config['platform_appid'] = null; $admin_config['platform_secret'] = null; $admin_config['platform_token'] = null; $admin_config['platform_aes_key'] = null; $admin_config['platform_status'] = null; $admin_config['platform_isdefault'] = null; if(isset($admin_config['platform_id']) && !empty($admin_config['platform_id'])){ if($platform = model('Platform')->getInfo($admin_config['platform_id'])){ $admin_config['platform_authhost'] = $platform['authhost'] ?? null; $admin_config['platform_appid'] = $platform['appid'] ?? null; $admin_config['platform_secret'] = $platform['secret'] ?? null; $admin_config['platform_token'] = $platform['token'] ?? null; $admin_config['platform_aes_key'] = $platform['aes_key'] ?? null; $admin_config['platform_status'] = $platform['status'] ?? null; $admin_config['platform_isdefault'] = $platform['isdefault'] ?? null; } } //设置业务域名信息 $admin_config['ophost_host'] = null; $admin_config['ophost_hostfile'] = null; $admin_config['ophost_status'] = null; $admin_config['ophost_isdefault'] = null; if(isset($admin_config['ophost_id']) && !empty($admin_config['ophost_id'])){ if($ophost = model('Ophost')->getInfoById($admin_config['ophost_id'])){ $admin_config['ophost_host'] = $ophost['host'] ?? null; $admin_config['ophost_hostfile'] = $ophost['hostfile'] ?? null; $admin_config['ophost_status'] = $ophost['status'] ?? null; $admin_config['ophost_isdefault'] = $ophost['isdefault'] ?? null; } } //设置支付域名信息 $admin_config['wxpay_pay_host'] = null; $admin_config['wxpay_name'] = null; $admin_config['wxpay_appid'] = null; $admin_config['wxpay_secret'] = null; $admin_config['wxpay_payfile'] = null; $admin_config['wxpay_mcid'] = null; $admin_config['wxpay_apikey'] = null; $admin_config['wxpay_status'] = null; $admin_config['wxpay_isdefault'] = null; if(isset($admin_config['wxpay_id']) && !empty($admin_config['wxpay_id'])){ if($payhost = model('Wxpay')->getInfoById($admin_config['wxpay_id'])){ $admin_config['wxpay_pay_host'] = $payhost['pay_host'] ?? null; $admin_config['wxpay_name'] = $payhost['name'] ?? null; $admin_config['wxpay_appid'] = $payhost['appid'] ?? null; $admin_config['wxpay_secret'] = $payhost['secret'] ?? null; $admin_config['wxpay_payfile'] = $payhost['payfile'] ?? null; $admin_config['wxpay_mcid'] = $payhost['mcid'] ?? null; $admin_config['wxpay_apikey'] = $payhost['apikey'] ?? null; $admin_config['wxpay_status'] = $payhost['status'] ?? null; $admin_config['wxpay_isdefault'] = $payhost['isdefault'] ?? null; $admin_config['payment_method'] = $payhost['payment_method'] ?? '0'; //支付方式:0=微信支付,1=四方支付 $admin_config['quartet_merchant_id'] = $payhost['quartet_merchant_id'] ?? ''; //四方支付商户ID $admin_config['quartet_app_id'] = $payhost['quartet_app_id'] ?? ''; //四方支付APPID $admin_config['quartet_app_key'] = $payhost['quartet_app_key'] ?? ''; //四方支付APPKEY } } //设置菜单平台信息 $admin_config['menu_platform_authhost'] = null; $admin_config['menu_platform_appid'] = null; $admin_config['menu_platform_secret'] = null; $admin_config['menu_platform_token'] = null; $admin_config['menu_platform_aes_key'] = null; $admin_config['menu_platform_status'] = null; $admin_config['menu_platform_isdefault'] = null; if(isset($admin_config['menu_platform_id']) && !empty($admin_config['menu_platform_id'])){ if($platform = model('Platform')->getInfo($admin_config['menu_platform_id'])){ $admin_config['menu_platform_authhost'] = $platform['authhost'] ?? null; $admin_config['menu_platform_appid'] = $platform['appid'] ?? null; $admin_config['menu_platform_secret'] = $platform['secret'] ?? null; $admin_config['menu_platform_token'] = $platform['token'] ?? null; $admin_config['menu_platform_aes_key'] = $platform['aes_key'] ?? null; $admin_config['menu_platform_status'] = $platform['status'] ?? null; $admin_config['menu_platform_isdefault'] = $platform['isdefault'] ?? null; } } //设置菜单业务域名信息 $admin_config['menu_ophost_host'] = null; $admin_config['menu_ophost_hostfile'] = null; $admin_config['menu_ophost_status'] = null; $admin_config['menu_ophost_isdefault'] = null; $admin_config['menuophost'] = null; if(isset($admin_config['menuophost_id']) && !empty($admin_config['menuophost_id'])){ if($ophost = model('Ophost')->getInfoById($admin_config['menuophost_id'])){ $admin_config['menu_ophost_host'] = $ophost['host'] ?? null; $admin_config['menu_ophost_hostfile'] = $ophost['hostfile'] ?? null; $admin_config['menu_ophost_status'] = $ophost['status'] ?? null; $admin_config['menu_ophost_isdefault'] = $ophost['isdefault'] ?? null; //兼容数据 $admin_config['menuophost'] = $ophost['host']; } } //设置菜单支付域名信息 $admin_config['menu_wxpay_pay_host'] = null; $admin_config['menu_wxpay_name'] = null; $admin_config['menu_wxpay_appid'] = null; $admin_config['menu_wxpay_secret'] = null; $admin_config['menu_wxpay_payfile'] = null; $admin_config['menu_wxpay_mcid'] = null; $admin_config['menu_wxpay_apikey'] = null; $admin_config['menu_wxpay_status'] = null; $admin_config['menu_wxpay_isdefault'] = null; $admin_config['menuwxpay_host'] = null; $admin_config['menu_payment_method'] = null; //支付方式:0=微信支付,1=四方支付 $admin_config['menu_quartet_merchant_id'] = null; //四方支付商户ID $admin_config['menu_quartet_app_id'] = null; //四方支付APPID $admin_config['menu_quartet_app_key'] = null; //四方支付APPKEY if(isset($admin_config['menuwxpay_id']) && !empty($admin_config['menuwxpay_id'])){ if($payhost = model('Wxpay')->getInfoById($admin_config['menuwxpay_id'])){ $admin_config['menu_wxpay_pay_host'] = $payhost['pay_host'] ?? null; $admin_config['menu_wxpay_name'] = $payhost['name'] ?? null; $admin_config['menu_wxpay_appid'] = $payhost['appid'] ?? null; $admin_config['menu_wxpay_secret'] = $payhost['secret'] ?? null; $admin_config['menu_wxpay_payfile'] = $payhost['payfile'] ?? null; $admin_config['menu_wxpay_mcid'] = $payhost['mcid'] ?? null; $admin_config['menu_wxpay_apikey'] = $payhost['apikey'] ?? null; $admin_config['menu_wxpay_status'] = $payhost['status'] ?? null; $admin_config['menu_wxpay_isdefault'] = $payhost['isdefault'] ?? null; $admin_config['menu_payment_method'] = $payhost['payment_method'] ?? '0'; //支付方式:0=微信支付,1=四方支付 $admin_config['menu_quartet_merchant_id'] = $payhost['quartet_merchant_id'] ?? ''; //四方支付商户ID $admin_config['menu_quartet_app_id'] = $payhost['quartet_app_id'] ?? ''; //四方支付APPID $admin_config['menu_quartet_app_key'] = $payhost['quartet_app_key'] ?? ''; //四方支付APPKEY //兼容数据 $admin_config['menuwxpay_host'] = $payhost['pay_host']; } } //设置虚假菜单顶级域名信息 $admin_config['fakemenuophost_host'] = null; $admin_config['fakemenuophost_scheme'] = null; $virtualDomain = new VirtualDomain(); if(isset($admin_config['fakemenuophost_id']) && !empty($admin_config['fakemenuophost_id'])){ if($fakehostArr = $virtualDomain->where('id', $admin_config['fakemenuophost_id'])->find()){ $admin_config['fakemenuophost_host'] = $fakehostArr['host']; //虚假菜单顶级域名 $admin_config['fakemenuophost_scheme'] = '1'==$fakehostArr['scheme'] ? 'https' : 'http'; } } //设置虚假业务顶级域名信息 $admin_config['fakeophost_host'] = null; $admin_config['fakeophost_scheme'] = null; if(isset($admin_config['fakeophost_id']) && !empty($admin_config['fakeophost_id'])){ if($fakehostArr = $virtualDomain->where('id', $admin_config['fakeophost_id'])->find()){ $admin_config['fakeophost_host'] = $fakehostArr['host']; //虚假菜单顶级域名 $admin_config['fakeophost_scheme'] = '1'==$fakehostArr['scheme'] ? 'https' : 'http'; } } } /** * 设置AdminInfo缓存的页面展示参数 * @param $admin_config */ protected function setPageTitleConfig(&$admin_config){ //设置页面男女频标题 foreach (collection(ManagePage::all())->toArray() as $value) { $commonTitle[$value['sex']] = $value['name']; } $admin_config['boy'] = isset($admin_config['page_title']['boy_title']) ? $admin_config['page_title']['boy_title'] : $commonTitle[1] ?? '男频'; $admin_config['girl'] = isset($admin_config['page_title']['girl_title']) ? $admin_config['page_title']['girl_title'] : $commonTitle[2] ?? '女频'; $admin_config['recently'] = isset($admin_config['page_title']['recently_title']) ? $admin_config['page_title']['recently_title'] : '最近阅读'; //设置首页标题 if(isset($admin_config['page_title']['index_title']) && !empty($admin_config['page_title']['index_title'])){ $admin_config['index_title'] = $admin_config['page_title']['index_title']; }else{ $admin_config['index_title']='首页'; } //检查是否设置性别 $admin_config['page_sex'] = isset($admin_config['page_sex']) ? $admin_config['page_sex'] : 0; } /** * 检查微信配置是否已完成 * @param null|int $channel_id 渠道商id * @return bool * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function checkWechatConfig($channel_id = null) { if ($channel_id) { $admin_config = model('AdminConfig')->where('admin_id',$channel_id)->find(); return model('Ptoken')->checkPlatformIsAuth($admin_config['platform_list'],$channel_id); } return false; } /** * 根据appid获取admin信息 * @param $appid * @return array|bool|false|mixed|\PDOStatement|string|Model */ public function getAdminInfoByAppId($appid) { try{ $redis = Redis::instance(); $key = 'AA:' . $appid; $admin_id = null; if (Cache::has($key)) { Log::info("获取缓存:$key filecache命中"); $admin_id = Cache::get($key); } if (!$admin_id) { if ($redis->exists($key)) { $admin_id = $redis->get($key); Log::info("获取appid:$appid,redis命中"); Cache::set($key, $admin_id, 10); } } if (!$admin_id) { $adminInfo = $this->where('appid', $appid)->find(); $admin_id = $adminInfo['admin_id'] ?? false; if ($admin_id) { Log::info("获取appid:$appid,mysql命中"); $redis->setex($key, 86400, $admin_id); Cache::set($key, $admin_id, 10); } } if ($admin_id) { return $this->getAdminInfoAll($admin_id); } }catch (\Exception $e){ LogService::exception($e); return false; } } /**获取渠道商ID&公众号名称 * @param $adminIds * @param null $acc_name * @param int $limit * @return array|bool */ public function getListByAcc($adminIds,$acc_name = null){ if(empty($adminIds)){ return false; } $where['admin_id'] = ['in',$adminIds]; if(!empty(trim($acc_name))){ $where['JSON_EXTRACT(json, "$.authorizer_info.nick_name")'] = ["like","%{$acc_name}%"]; } $list = $this->where($where)->where("appid is not null")->column("admin_id,json $.authorizer_info.nick_name"); if(!$list){ return []; } $res = []; foreach ($list as $k=>$v){ $res[$k] = ['admin_id'=>$k,'acc_name'=>trim($v,'"')?:'-']; } return array_values($res); // return [['admin_id'=>1,'acc_name'=>'服务号1'],['admin_id'=>2,'acc_name'=>'服务号2']]; } /** * 通过服务号名称查找adminid * @param $accName * @return array|bool */ public function getAdminIdByOfficialName($accName) { if (empty($accName)) { return false; } $where['JSON_EXTRACT(admin_config.json, "$.authorizer_info.nick_name")'] = $accName; $result = $this->where($where)->where("appid is not null")->column('admin_id'); return empty($result) ? 0 : current($result); } /** * 通过admin_id 获取 subscription_num * @param $adminid * @return int */ public function getSubscriptionInfoByAdminId($adminid) { $where['admin_id'] = $adminid; $result = $this->where($where)->find();//->toArray(); if($result){ $result = $result->toArray(); $data = []; $data['is_subscription'] = $result['is_subscription']; $data['subscription_num'] = $result['subscription_num']; return $data; } return false; } /** * 根据公众号user_name 获取渠道信息 * @param $user_name * @return AdminConfig|array|mixed|null * @throws \think\Exception * @throws \think\exception\DbException */ public function getInfoByOfficialUserName($user_name) { $key = 'ACOU:'.$user_name; if (Redis::instance()->exists($key)) { $adminConfig = json_decode(Redis::instance()->get($key), true); } else { $adminConfig = $this->get(['json$.authorizer_info.user_name' => $user_name]); if ($adminConfig) { $adminConfig = $adminConfig->toArray(); } else { $adminConfig = []; } Redis::instance()->set($key, json_encode($adminConfig, JSON_UNESCAPED_UNICODE), 3600); } return $adminConfig; } }