<?php
header(
"Content-Type: application/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
];
}
?>