YouTube OAuth 2.0 - GET请求从var_dump()获取NULL;

时间:2014-10-21 18:44:56

标签: php json oauth-2.0 youtube-api

我一直在使用YouTube OAuth 2.0,但我遇到了一些问题。我一直在使用这个示例,我已经开始使用Google频道进行身份验证并使用代码重定向回来。

当尝试发送GET请求以从OAuth范围中获取某些频道数据时,我得到了一个" NULL"回应,我不确定为什么。

(验证包含工作请求)

echo "<a href='$validate'>Login with Google for advanced analytics</a>";


$channel_data = file_get_contents('https://www.googleapis.com/youtube/analytics/v1/reports?ids=channel%3D%3DMINE&start-date=2014-08-01&end-date=2014-09-01&metrics=views&key={api_key}');
$channel_data = json_decode($channel_data, true);

echo "<br />";
var_dump($channel_data);

它似乎适用于找到https://developers.google.com/youtube/analytics/v1/

的示例请求

1 个答案:

答案 0 :(得分:0)

这似乎是对how to implement OAuth 2.0的误解。

此分步说明是我链接的网站的摘要:

  1. 在开发者控制台中为Web应用程序创建客户端ID
  2. 让您的用户转到auth网址
  3. 当他/她完成该过程时,用户将被重定向到您指定的重定向uri。
  4. 在此页面上,您的php脚本必须抓取code - 查询($_GET['code']
  5. 接下来,您必须向页面发出请求(包含代码),该页面为您提供访问令牌和刷新令牌。访问令牌在1小时后到期,然后您必须使用刷新令牌获取新的令牌
  6. 一旦拥有访问令牌,就可以开始制作api请求
  7. 在顶部链接的网站上,您会找到详细的说明。 希望这会有所帮助:)


    更新

    为了交换令牌的代码,您必须执行发布请求。我认为这不适用于file_get_contents。我建议在这里使用curl

    此代码应该适合您,但未经过测试:

    $url = 'https://accounts.google.com/o/oauth2/token';
    
    $postfields = [
        'code'=>'YOUR_CODE',
        'client_id'=>'YOUR_CLIENT_ID',
        'client_secret'=>'YOUR_CLIENT_SECRET',
        'redirect_uri'=>'YOUR_REDIRECT_URI',
        'grant_type'=>'authorization_code'
    ];
    
    
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    
    curl_setopt($curl, CURLOPT_POST, count($postfields));
    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($postfields));
    
    $response = curl_exec($curl);
    curl_close($curl);
    
    $response = json_decode($response);
    

    $response现在是一个带有键access_token, token_type, expires_in, refresh_token的关联数组。 token_type始终为Bearerexpires_in始终为3600。另外两个是重要的,你应该安全地存储它们!

    您可以在开发者控制台中找到您的客户端ID和客户端密码。

    但请注意,在此示例中,ssl验证已禁用。这意味着您的连接不安全。