setOptions([Memcached::OPT_TCP_NODELAY => TRUE, Memcached::OPT_BINARY_PROTOCOL => TRUE, Memcached::OPT_BUFFER_WRITES => FALSE, Memcached::OPT_NO_BLOCK => TRUE]); $MEMCACHED->addServer('127.0.0.1', 11211); $who = "user"; $event_listener = false; if (!empty($_SERVER["HTTP_AUTHORIZATION"])) { $app_auth = []; $auth_data = $authorization -> auth($_SERVER["HTTP_AUTHORIZATION"]); if(empty($auth_data["access"])){ $message = $API['ERR_1007']; if(!empty($err)) $message['details'] = $err; echo json_encode($message, JSON_UNESCAPED_UNICODE); exit(); } switch ($auth_data['application_id']) { case "4d219a96-f3ab-41b0-89a4-23a84b49178e": $app_auth["access"] = true; $app_auth["app"] = "topseller"; $who = "app"; break; case "5b448c74-236a-400b-8f02-9895b1f0dd4e": $app_auth["access"] = true; $app_auth["app"] = "gotti"; $who = "app"; break; case "136a27e7-a568-407a-bc8d-76f58798b3c3": $app_auth["access"] = true; $app_auth["app"] = "pim"; $who = "app"; break; default: $app_auth["access"] = false; break; } if(empty($app_auth["access"])){ $message = $API['ERR_1007']; if(!empty($err)) $message['details'] = $err; echo json_encode($message, JSON_UNESCAPED_UNICODE); exit(); } @$request = json_decode(file_get_contents('php://input'), true); } else { $req_url = explode('?', $_SERVER['REQUEST_URI'])[0]; $event_listener = ($req_url == '/v1/task/events'); if($event_listener){ $jwt = !empty($_GET['api_token']) ? $_GET['api_token'] : null; $request = ['payment_hash' => !empty($_GET['payment_hash']) ? $_GET['payment_hash'] : null]; $MODE_WITHOUT_CONN = true; } else{ $jwt = !empty($_SERVER['HTTP_API_TOKEN']) ? $_SERVER['HTTP_API_TOKEN'] : null; } $_AUTH_DATA = $authorization -> auth($jwt); if(!empty($MODE_WITHOUT_CONN)) connection_close(); if (!$_AUTH_DATA['access'] || !empty($_AUTH_DATA['application_id'])) { $message = $API['ERR_1007']; echo json_encode($message, JSON_UNESCAPED_UNICODE); exit(); } $accountId = $_AUTH_DATA["accountId"]; $accountName = $_AUTH_DATA["accountName"]; $isset_nodes = $_AUTH_DATA["app"]; $emploee = []; $emploee = $_AUTH_DATA['emploee']; $applicationId = $_AUTH_DATA['app']; $DEV = in_array($accountId, $DEVELOPERS); $SUPER_DEV = ($accountId == "648adbe428c20" || $accountId == "64ac3633a3ea0"); } table_name($TABLE_NAME); $NODES = new NodesMemcached(); // получаем урл и разбираем его $url = []; $put = ''; $test_worker = false; $REQUEST_URI = $_SERVER['REQUEST_URI']; if(mb_strpos($_SERVER['REQUEST_URI'], '/debug/') !== false){ $REQUEST_URI = str_replace('/debug', '', $_SERVER['REQUEST_URI']); $test_worker = true; } $url = explode('/', str_replace('/api/', '', explode('?', $REQUEST_URI)[0])); $function = ''; $allow_test_worker_endpoints = ['load_node', 'get_filters_dop_info', 'get_list', 'product_list']; // если получили в итоге вменяемый урл if (is_array($url) && count($url)) { if ($url[0] == ''){ unset($url[0]); $url = array_values($url); } if ($url[count($url) - 1] == '') unset($url[count($url) - 1]); // проверяем версию апи if (!empty($url[0])) { // проверяем количество папок if (count($url) >= 3) { //если нет такой папки $put = '/' . $url[0]; if (!file_exists(__DIR__ . $put)) { $return = $API['ERR_1000']; $return['details'] = 'Несуществующая версия api'; echo json_encode($return, JSON_UNESCAPED_UNICODE); exit(); } $put.= '/' . strtoupper($url[1]); if (!file_exists(__DIR__ . $put)) { $return = $API['ERR_1000']; $return['details'] = $url[1]; echo json_encode($return, JSON_UNESCAPED_UNICODE); exit(); } if (count($url) == 3) { // если нет такого файла $put .= "/{$url[2]}.php"; if (!file_exists(__DIR__ . $put)) { $return = $API['ERR_1001']; $return['details'] = $url[2]; echo json_encode($return, JSON_UNESCAPED_UNICODE); exit(); } $function = $url[2]; } else if (count($url) == 4) { //если нет такой папки $put .= '/' . strtoupper($url[2]); if (!file_exists(__DIR__ . $put)) { $return = $API['ERR_1000']; $return['details'] = $url[2]; echo json_encode($return, JSON_UNESCAPED_UNICODE); exit(); } // если нет такого файла $put .= "/{$url[3]}.php"; if (!file_exists(__DIR__ . $put)) { $return = $API['ERR_1001']; $return['details'] = $url[3]; echo json_encode($return, JSON_UNESCAPED_UNICODE); exit(); } $function = $url[3]; } else { $return = $API['ERR_1005']; $return['details'] = $url; echo json_encode($return, JSON_UNESCAPED_UNICODE); exit(); } include_once(__DIR__ . $put); if (function_exists($function)) { if($test_worker && !in_array($function, $allow_test_worker_endpoints)){ $message = $API['ERR_1012']; echo json_encode($message, JSON_UNESCAPED_UNICODE); exit(); } if (empty($request)) { if ($put == "/IMAGE/upload.php" or $put == "/FILES/upload.php") @$request = file_get_contents('php://input'); else if($event_listener){ } else @$request = json_decode(file_get_contents('php://input'), true); } if (($who == "app" and empty($app_auth["app"])) || ($who == "app" and empty($ALLOW_APP_ENDPOINTS[$app_auth["app"]])) || ($who == "app" and !in_array(implode("/", $url), $ALLOW_APP_ENDPOINTS[$app_auth["app"]]) and !in_array(implode("/", $url), $ALLOW_ALL_ENDPOINTS))) { $return = $API['ERR_1012']; echo json_encode($return, JSON_UNESCAPED_UNICODE); exit(); } else if ($who == "user" and in_array(implode("/", $url), $ALLOW_APP_ENDPOINTS) and !in_array(implode("/", $url), $ALLOW_ALL_ENDPOINTS) and !$SUPER_DEV) { $return = $API['ERR_1012']; echo json_encode($return, JSON_UNESCAPED_UNICODE); exit(); } $launch_program = [ 'accountId' => $accountId, 'userId' => $emploee['userId'], 'script' => $function, 'params' => json_encode($request, JSON_UNESCAPED_UNICODE), 'source' => 'api', 'folder' => 'api'.mb_strtolower(str_replace('/'.basename($put), '', $put)) ]; try{ $ret = json_encode($function(), JSON_UNESCAPED_UNICODE); echo $ret; } catch (Throwable $e) { $err = $API["ERR_0000"]; $msg = "Скрипт: " . $e->getFile() . PHP_EOL . "Строка: " . $e->getLine() . PHP_EOL . "Сообщение: " . $e->getMessage(); $err["details"] = $msg; $err["message"] = "Произошла ошибка"; if ($_debug) Running::debug($err, '$err'); Running::crash($msg, $e->getTrace()); echo json_encode($err, JSON_UNESCAPED_UNICODE); } finally { $report['resources']['memory'] = round(memory_get_peak_usage() / 1024 / 1024, 2) . 'M'; if(!empty($ret)) Running::log('tech_log', $ret); launch_done('api', $launch_program, $report); } } else { $return = $API['ERR_1002']; $return['details'] = $$function; echo json_encode($return, JSON_UNESCAPED_UNICODE); exit(); } } else { // если количество разделов пути > 3 $return = $API['ERR_1005']; $return['details'] = $url; echo json_encode($return, JSON_UNESCAPED_UNICODE); exit(); } } else { // если неверно указана версия $return = $API['ERR_1003']; $return['details'] = (!empty($url[0])) ? $url[0] : ''; $return['url'] = $url; echo json_encode($return, JSON_UNESCAPED_UNICODE); exit(); } } else { // если вообще не пойми какой урл получили $return = $API['ERR_1006']; $return['details'] = $url; return json_encode($return, JSON_UNESCAPED_UNICODE); exit(); }