我一直在使用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/
似乎是对如何实现OAuth 2.0的误解。
此分步说明是我链接的网站的摘要:
- 在开发人员控制台中为 Web 应用程序创建客户端 ID
- 让用户转到身份验证网址
- 完成该过程后,用户将被重定向到您指定的重定向 URI。
- 在此页面上,您的 PHP 脚本必须获取
code
-query ($_GET['code']
( - 接下来,您必须向提供访问令牌和刷新令牌的页面发出请求(包含代码(。访问令牌在 1 小时后过期,然后您必须使用刷新令牌获取一个新令牌
- 获得访问令牌后,即可开始发出 API 请求
在顶部链接的网站上,您可以找到详细说明。希望这对:)有所帮助
更新
为了交换令牌的代码,您必须执行 post 请求。我不认为这对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
总是Bearer
,expires_in
总是3600
。另外两个是重要的,您应该安全地存放它们!
您可以在开发者控制台中找到您的客户端 ID 和客户端密钥。
但请注意,在此示例中,SSL 验证被禁用。这意味着您的连接不安全。