吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1321|回复: 22
上一主题 下一主题
收起左侧

[其他原创] 123pan解析接口PHP版

[复制链接]
跳转到指定楼层
楼主
jsxyhxz 发表于 2025-4-19 01:33 回帖奖励
之前找解析,发现有贴友做了一个php版网页解析123盘:https://www.52pojie.cn/forum.php?mod=viewthread&tid=1790540&highlight=%CD%F8%C5%CC%BD%E2%CE%F6

在此基础上改成接口版本,可以直接调用,测试:https://www.htuzi.com/123pan/123pan.php?url=https://www.123865.com/s/U2ReVv-n3M7



代码:
[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
    ];
}
?>

免费评分

参与人数 3吾爱币 +9 热心值 +3 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
laozhang4201 + 1 + 1 热心回复!
schm168 + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
zx1982623 发表于 2025-4-19 09:14
{"success":false,"message":"无法访问 123网盘 API,请检查网络或目标服务是否可用!","download_url":null}
推荐
dazeng 发表于 2025-4-24 22:13
{"success":false,"message":"错误码:5112,请登录后下载","download_url":null}
3#
schm168 发表于 2025-4-19 05:50
4#
vscos 发表于 2025-4-19 06:24
schm168 发表于 2025-4-19 05:50
这个怎么使用?

这个好像得把代码放到服务器上,
5#
schoolyears 发表于 2025-4-19 07:37
好东西。
6#
呱呱生 发表于 2025-4-19 08:12
如果php代码是你写的,那就牛啊
7#
pw0n 发表于 2025-4-19 08:33
看着牛逼
8#
pandaligx 发表于 2025-4-19 08:57
会失效么
9#
pandaligx 发表于 2025-4-19 08:59
这个直连会消耗分享者的流量吗,比如分享流量或者直连流量
10#
zx1982623 发表于 2025-4-19 09:09
解析出来一个危险提示
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-5-12 22:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表