PHP服务端获取YouTube频道会员列表授权问题求助
解决YouTube频道会员列表获取问题的方案
一、正确认证方式:OAuth 2.0 刷新令牌模式
该API不支持API Key与服务账号,必须采用OAuth 2.0离线授权模式,通过刷新令牌让服务端自动续期AccessToken,无需手动重复登录。
操作步骤:
- 在Google Cloud控制台创建OAuth客户端ID(应用类型选「桌面应用」或「Web应用」,桌面应用更易获取初始令牌)
- 首次运行授权流程获取刷新令牌:
修改代码添加离线访问配置:$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)); } - 后续服务端自动运行逻辑:
注:首次需手动在浏览器完成授权,后续服务端可自动运行。$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);
二、验证用户会员身份的方法
若要实现会员专属页面,可通过以下方式验证登录用户的会员身份:
- 引导用户用Google账号登录(申请
https://www.googleapis.com/auth/youtube.readonly权限) - 获取用户ID后,调用API查询是否为你的频道会员:
返回结果非空则说明该用户是你的频道会员。$response = $service->members->listMembers('snippet', [ 'channelId' => '你的频道ID', 'userId' => '登录用户的ID' ]);
常见问题说明
- API Key不可用:该接口属于需用户身份授权的私有数据接口,API Key仅适用于公开数据查询,因此必然报错。
- 服务账号不可用:YouTube多数接口不支持服务账号,因其无法绑定个人创作者频道,故会触发权限禁止提示。
内容的提问来源于stack exchange,提问作者Kyukyu
相关产品推荐
相关产品推荐

