[PHP] 纯文本查看 复制代码
<?php
header("Content-Type: application/json");
// 捕获所有错误并输出为 JSON 格式
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
if (isset($_GET['url'])) {
$shareUrl = $_GET['url'];
$shareCode = "";
$pattern = "/(?<=\/s\/)[^\/.]+/";
preg_match($pattern, $shareUrl, $match);
if ($match) {
$shareId = $match[0];
$extractCodePattern = "/提取码:(\w+)/";
preg_match($extractCodePattern, $shareUrl, $extractCodeMatch);
if ($extractCodeMatch) {
$shareCode = $extractCodeMatch[1];
}
// 获取直链信息
$result = getInfo($shareId, $shareCode);
echo json_encode($result, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); // 不转义斜杠和中文
} else {
echo json_encode([
"success" => false,
"message" => "123网盘 URL 未找到!",
"download_url" => null
], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
}
} else {
echo json_encode([
"success" => false,
"message" => "缺少 url 参数!",
"download_url" => null
], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
}
} else {
echo json_encode([
"success" => false,
"message" => "请求方法错误,仅支持 GET 请求!",
"download_url" => null
], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
}
function getInfo($shareId, $shareCode) {
$requestUrl = "https://www.123pan.com/b/api/share/get?limit=100&next=1&orderBy=share_id&orderDirection=desc&shareKey=" . $shareId . "&SharePwd=" . $shareCode . "&ParentFileId=0&Page=1";
$opts = array(
'http' => array(
'header' => "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.100\r\n"
)
);
$context = stream_context_create($opts);
$responseText = file_get_contents($requestUrl, false, $context);
if ($responseText === false) {
return [
"success" => false,
"message" => "无法访问 123网盘 API,请检查网络或目标服务是否可用!",
"download_url" => null
];
}
return parseInfo($responseText, $shareId);
}
function parseInfo($str, $shareId) {
$data = json_decode($str, true);
if ($data['code'] == 0) {
$type = $data['data']['InfoList'][0]['Type'];
if ($type == 0) {
$fileId = $data['data']['InfoList'][0]['FileId'];
$size = $data['data']['InfoList'][0]['Size'];
$s3KeyFlag = $data['data']['InfoList'][0]['S3KeyFlag'];
$etag = $data['data']['InfoList'][0]['Etag'];
// 执行下载链接请求
return combinedData($shareId, $fileId, $size, $s3KeyFlag, $etag);
} else {
return [
"success" => false,
"message" => "文件夹解析暂时不支持。",
"download_url" => null
];
}
} else {
return [
"success" => false,
"message" => "错误码:" . $data['code'] . "," . $data['message'],
"download_url" => null
];
}
}
function combinedData($shareId, $fileId, $size, $s3KeyFlag, $etag) {
$requestUrl = "https://www.123pan.com/b/api/share/download/info";
$postData = json_encode(array(
"ShareKey" => $shareId,
"FileID" => $fileId,
"S3keyFlag" => $s3KeyFlag,
"Size" => $size,
"Etag" => $etag
));
$opts = array(
'http' => array(
'header' => "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.100\r\n" .
"Content-Type: application/json;charset=UTF-8\r\n",
'method' => 'POST',
'content' => $postData
)
);
$context = stream_context_create($opts);
$response = file_get_contents($requestUrl, false, $context);
if ($response === false) {
return [
"success" => false,
"message" => "无法访问下载信息接口!",
"download_url" => null
];
}
return parseDownloadURL($response);
}
function parseDownloadURL($str) {
$data = json_decode($str, true);
if ($data['code'] == 0) {
$downloadURL = $data['data']['DownloadURL'];
$downloadURL = extractDownloadLink($downloadURL);
if ($downloadURL) {
return getDirectLink($downloadURL);
} else {
return [
"success" => false,
"message" => "无法解析下载链接!",
"download_url" => null
];
}
} else {
return [
"success" => false,
"message" => "错误码:" . $data['code'] . "," . $data['message'],
"download_url" => null
];
}
}
function extractDownloadLink($str) {
$pattern = "/params=([^&]+)/";
preg_match($pattern, $str, $match);
if ($match) {
$paramsValue = $match[1];
$decodedString = base64_decode($paramsValue);
if (strpos($decodedString, 'auto_redirect') === false) {
if (strpos($decodedString, '?') !== false) {
$decodedString .= "&auto_redirect=0";
} else {
$decodedString .= "?auto_redirect=0";
}
}
return $decodedString;
}
return null;
}
function getDirectLink($requestUrl) {
$opts = array(
'http' => array(
'header' => "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.100\r\n"
)
);
$context = stream_context_create($opts);
$responseText = file_get_contents($requestUrl, false, $context);
$data = json_decode($responseText, true);
if ($data && isset($data['data']['redirect_url'])) {
return [
"success" => true,
"message" => "获取成功",
"download_url" => $data['data']['redirect_url']
];
}
return [
"success" => false,
"message" => "无法获取最终直链!",
"download_url" => null
];
}
?>