卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章1844本站已运行41115

PHP版123pan解析接口

<?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
    ];
}
?>
测试地址:https://ydy.srzxkj.com/123.php?url=https://www.123865.com/s/U2ReVv-n3M7
卓越飞翔博客
上一篇: h5player播放器,html本地播放器
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏