You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP服务端获取YouTube频道会员列表授权问题求助

解决YouTube频道会员列表获取问题的方案

一、正确认证方式:OAuth 2.0 刷新令牌模式

该API不支持API Key与服务账号,必须采用OAuth 2.0离线授权模式,通过刷新令牌让服务端自动续期AccessToken,无需手动重复登录。

操作步骤:

  1. 在Google Cloud控制台创建OAuth客户端ID(应用类型选「桌面应用」或「Web应用」,桌面应用更易获取初始令牌)
  2. 首次运行授权流程获取刷新令牌:
    修改代码添加离线访问配置:
    $client = new Google_Client();
    $client->setApplicationName("Test");
    $client->setScopes([
        "https://www.googleapis.com/auth/youtube.channel-memberships.creator"
    ]);
    $client->setAuthConfig(base_path() . '/' . env('SECRETS_FILE'));
    // 开启离线访问以获取刷新令牌
    $client->setAccessType('offline');
    $client->setPrompt('select_account consent');
    
    // 首次运行生成授权URL,手动访问获取授权码
    if (!isset($_GET['code'])) {
        $authUrl = $client->createAuthUrl();
        header('Location: ' . filter_var($authUrl, FILTER_SANITIZE_URL));
        exit;
    } else {
        // 用授权码交换包含刷新令牌的完整令牌数据
        $token = $client->fetchAccessTokenWithAuthCode($_GET['code']);
        // 将令牌(重点保存refresh_token)存入数据库或配置文件
        file_put_contents('token.json', json_encode($token));
    }
    
  3. 后续服务端自动运行逻辑:
    $client = new Google_Client();
    $client->setApplicationName("Test");
    $client->setScopes([
        "https://www.googleapis.com/auth/youtube.channel-memberships.creator"
    ]);
    $client->setAuthConfig(base_path() . '/' . env('SECRETS_FILE'));
    // 加载已保存的令牌
    $token = json_decode(file_get_contents('token.json'), true);
    $client->setAccessToken($token);
    
    // 令牌过期时自动用刷新令牌续期
    if ($client->isAccessTokenExpired()) {
        $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
        // 保存更新后的令牌
        file_put_contents('token.json', json_encode($client->getAccessToken()));
    }
    
    $service = new Google_Service_YouTube($client);
    // 指定获取当前授权用户的频道会员列表
    $response = $service->members->listMembers('snippet', [
        'mine' => true
    ]);
    print_r($response);
    
    注:首次需手动在浏览器完成授权,后续服务端可自动运行。

二、验证用户会员身份的方法

若要实现会员专属页面,可通过以下方式验证登录用户的会员身份:

  1. 引导用户用Google账号登录(申请https://www.googleapis.com/auth/youtube.readonly权限)
  2. 获取用户ID后,调用API查询是否为你的频道会员:
    $response = $service->members->listMembers('snippet', [
        'channelId' => '你的频道ID',
        'userId' => '登录用户的ID'
    ]);
    
    返回结果非空则说明该用户是你的频道会员。

常见问题说明

  • API Key不可用:该接口属于需用户身份授权的私有数据接口,API Key仅适用于公开数据查询,因此必然报错。
  • 服务账号不可用:YouTube多数接口不支持服务账号,因其无法绑定个人创作者频道,故会触发权限禁止提示。

内容的提问来源于stack exchange,提问作者Kyukyu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 12:58:16