parseQuery(); if($api[0] == 'token') { $_COOKIE = []; require_once '../../source/class/class_core.php'; $discuz = C::app(); $discuz->init_cron = false; $discuz->init_session = false; $discuz->init(); //检测 appid 的有效性 $_ENV['restful']->checkSign(); //生成 token $token = strtoupper(random(16)); $tokenData = $_ENV['restful']->isRefreshToken() ? $_ENV['restful']->refreshTokenData() : $_ENV['restful']->newTokenData(); $_ENV['restful']->setToken($token, $tokenData); if($_ENV['restful']->isRefreshToken()) { $_ENV['restful']->delTokenData(); } $_ENV['restful']->output([ 'ret' => 0, 'token' => $token, 'expires_in' => TIMESTAMP + $_ENV['restful']::TokenTTL, ]); } elseif($api[0] == 'callback') { $_ENV['authtoken'] = $api[1]; $_ENV['returntype'] = !empty($api[2]) ? $api[2] : ''; require_once '../../source/class/class_core.php'; $discuz = C::app(); $discuz->init_cron = false; $discuz->init_session = false; $discuz->init(); if(!$_G['uid']) { $authed = false; } else { $authed = $_ENV['restful']->setAuthToken($_ENV['authtoken'], [$_G['uid'], time()]); } if($authed) { require_once libfile('function/member'); clearcookies(); } if($_ENV['returntype'] == 'json') { if($authed) { $_ENV['restful']->error(0); } else { $_ENV['restful']->error(-119); } } elseif($_ENV['returntype'] == 'html') { $message = $authed ? lang('core', 'restful_auth_success') : lang('core', 'restful_auth_error'); include template('common/header_common'); include template('common/restful_auth'); } else { if($authed) { echo lang('core', 'restful_auth_success'); } else { echo lang('core', 'restful_auth_error'); } } } elseif($api[0] == 'authtoken') { require_once '../../source/class/class_core.php'; $discuz = C::app(); $discuz->init_cron = false; $discuz->init_session = false; $discuz->init(); $data = $_ENV['restful']->getAuthToken($_GET['authtoken']); if(!$data) { $_ENV['restful']->error(-119); } else { // token校验 $_ENV['restful']->checkToken(); require_once libfile('function/member'); $member = getuserbyuid($data[0]); if(!$member) { $_ENV['restful']->error(-119); } setloginstatus($member, 2592000); $_ENV['restful']->convertOutput(['member/uid' => 'uid']); } } elseif($api[0] == 'deltoken') { $_ENV['restful']->delTokenData(); $_ENV['restful']->output([ 'ret' => 0, 'token' => '', 'data' => [ 'msg' => 'ok' ] ]); } else { define('IN_RESTFUL_API', true); //检测 appid 的有效性 $_ENV['restful']->checkSign(); // token校验 $_ENV['restful']->checkToken(); // 初始化接口参数 $_ENV['restful']->initParam($api, $ver); // 接口频率控制 $_ENV['restful']->apiFreqCheck(); // 接口权限校验 $_ENV['restful']->apiPermCheck(); // script校验 $script = $_ENV['restful']->scriptCheck(); // 释放 GPC $_GET = $_ENV['restful']->paramDecode('get'); $_POST = $_ENV['restful']->paramDecode('post'); $_COOKIE = $_ENV['restful']->sessionDecode(); $requestParams = $_ENV['restful']->getRequestParam(); if($requestParams) { if(!empty($requestParams['GET']) && is_array($requestParams['GET'])) { foreach($requestParams['GET'] as $k => $v) { $_GET[$k] = $v; } } if(!empty($_GET)) { $_SERVER['QUERY_STRING'] = http_build_query($_GET); } if(!empty($requestParams['POST']) && is_array($requestParams['POST'])) { foreach($requestParams['POST'] as $k => $v) { $_POST[$k] = $v; } } if(!empty($requestParams['COOKIE']) && is_array($requestParams['COOKIE'])) { foreach($requestParams['COOKIE'] as $k => $v) { $_COOKIE[$k] = $v; } } } foreach($_COOKIE as $k => $v) { !empty($v) && setcookie($k, $v); } if(!defined('IN_RESTFUL_DEBUG')) { // 准备输出 [$shutdownFunc, $output] = $_ENV['restful']->getShutdownFunc(); // 运行 script register_shutdown_function([$_ENV['restful'], $shutdownFunc], $output); } $empty = []; $_ENV['restful']->plugin('before', $empty); try { $_GET['index'] = $script; chdir('../../'); require './index.php'; } catch (Exception $e) { $_ENV['restful']->error(-100); } }