"authorization_code", "code" => $code, "redirect_uri" => $redirect_uri, ]) ); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Basic " . base64_encode($client_id . ":" . $client_secret), "Content-Type: application/x-www-form-urlencoded", ]); $response = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); $token_data = json_decode($response, true); // Fail gracefully if token fetch fails if (!is_array($token_data) || !isset($token_data["access_token"])) { error_log("Token exchange failed: $response"); exit("Failed to retrieve access token"); } // Use access token to get character info $ch = curl_init("https://login.eveonline.com/oauth/verify"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer " . $token_data["access_token"], ]); $user_data = json_decode(curl_exec($ch), true); curl_close($ch); // Validate user info if (!is_array($user_data) || !isset($user_data["CharacterID"])) { error_log("Failed to verify character: " . json_encode($user_data)); exit("Character verification failed"); } $character_id = $user_data["CharacterID"]; $character_name = $user_data["CharacterName"]; // Save access & refresh tokens in session if (!isset($_SESSION["characters"][$character_id])) { $_SESSION["characters"][$character_id] = [ "name" => $character_name, "access_token" => $token_data["access_token"], "refresh_token" => $token_data["refresh_token"] ?? null, ]; } else { error_log("Character data already exists for ID: $character_id. Skipping overwrite."); } // Redirect back to main page header("Location: index.php"); exit();