<?php /** * 微信安全支持 扫描 * 检测 Cookie 统一跳转 */ namespace Frontend\Controller\Safe; use Com\Cookie; use Common\Common\Login; use Common\Common\User; use Think\Controller; use VcySDK\Service; class IndexController extends Controller { /** * 接收的数据 * @var array */ protected $postData = []; /** * 企业详情 * @var array */ private $epDetail = []; /** * cookie 实例 * @var null */ private $cookie = null; public function Index() { // 获取企业信息 $this->epDetail = $this->getEpDetail(); // 初始化 Cookie $this->startCookie(); // 初始化 SDK $this->initSdk(); // 获取 Cookie $login = &Login::instance(); $uid = $login->getCookie('uid'); $auth = $login->getCookie('auth'); $lastlogin = $login->getCookie('lastlogin'); $qydomain = $login->getCookie('qyDomain'); // 如果 Cookie 值为空 if (empty($uid) || empty($auth) || empty($lastlogin) || // 访问企业和 Cookie 不一样 (strtolower($qydomain) != strtolower($this->epDetail['epEnumber']))) { $this->returnError('未找到人员'); } // 获取人员 $userServ = &User::instance(); $user = $userServ->getByUid($uid, true); // 未找到用户或用户已删除 if (empty($user) || !$userServ->isNormal($user)) { $this->cookie->destroy(); return false; } // 跳转前端首页 $this->redirectFront('/app/page/index/index/index'); } /** * corpId 获取企业详情 * @return array|mixed */ private function getEpDetail() { if (empty($_COOKIE)) { $this->returnError('非法请求'); } try { // 不是常规调用 UC 接口 $sdkService = new Service(); $response = []; $sdkService->request($response, cfg('UC_APIURL') . '/s/enterprise/detail', [ 'corpId' => $_COOKIE['corpid'], ], [ 'Content-Type' => 'application/json', ], 'POST'); } catch (\Exception $e) { $this->returnError('未找到企业'); } return $response['data']; } /** * 初始化 Cookie */ private function startCookie() { $domain = cfg('COOKIE_DOMAIN'); $expired = cfg('COOKIE_EXPIRE'); $secret = md5(cfg('COOKIE_SECRET') . $this->epDetail['epEnumber']); // 初始化 $this->cookie = &Cookie::instance($domain, $expired, $secret); ob_start([ $this->cookie, 'send', ]); } /** * 初始化 SDk * @return bool */ private function initSdk() { $config = array( 'apiUrl' => cfg('UC_APIURL'), 'enumber' => $this->epDetail['epEnumber'], 'pluginIdentifier' => APP_IDENTIFIER, 'thirdIdentifier' => cfg('SDK_THIRD_IDENTIFIER'), 'logPath' => RUNTIME_PATH . '/Logs/VcySDK/', 'apiSecret' => cfg('API_SECRET'), 'apiSigExpire' => cfg('API_SIG_EXPIRE'), 'fileConvertApiUrl' => cfg('FILE_CONVERT_API_URL'), ); $service = &Service::instance(); $service->initSdk($config); return true; } /** * 跳转至前端Url * * @author zhonglei * * @param string $pageUrl 前端地址(#号之后的页面地址,不包含参数) * @param array $params 参数 * @param string $appdir 应用目录,默认为当前目录 * * @return void */ private function redirectFront($pageUrl, $params = [], $appdir = '') { if (!isset($params['ts'])) { $params['ts'] = MILLI_TIME; } if (cfg('STATIC_URL_DEBUG') === false) { unset($params['ts']); } if (empty($appdir)) { $appdir = APP_DIR; } $frontPath = cfg('FRONTEND_PATH'); $url = (is_ssl() ? 'https://' : 'http://') . $_SERVER['HTTP_HOST']; $url .= sprintf( '/%s/%s/%s/index.html#%s?%s', $this->epDetail['epEnumber'], $appdir, $frontPath, $pageUrl, http_build_query($params) ); redirect($url); } /** * 返回错误 * @param $errmsg */ protected function returnError($errmsg) { $this->_response(['errmsg' => $errmsg], 'json'); } }