也许我不明白Youtube Data API应该如何工作。但是,如果我有一个将生成oauth请求并接收回调(我有)的PHP应用程序,则它发送回的数据不是用户的API密钥。
所以我不知道我做错了什么还是什么,但是他们的文档让我头疼,而且我进行了搜索,甚至不知道我的过程是否正确:
Web服务器/ OAuth请求(php)
require_once 'vendor/autoload.php';
$client = new Google_Client();
$client->setAuthConfig('oauth.json');
$client->setAccessType("offline"); // offline access
$client->setIncludeGrantedScopes(true); // incremental auth
$client->addScope(Google_Service_YouTube::YOUTUBE_READONLY);
$client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php');
$auth_url = $client->createAuthUrl();
header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
客户授权我的申请
Google发回邮件(无论这是什么)
'code' => string 'BLABLABLABLABLA' (length=89)
'scope' => string 'https://www.googleapis.com/auth/youtube.readonly https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile' (length=224)
用户的API密钥在哪里,如何获取?这是不正确的,还是我只是在这里堆东西?
答案 0 :(得分:3)
使用OAuth时没有API密钥。您将获得一个访问令牌。 API密钥是从用户的Google开发者控制台获取的。
检查PHP Quickstart以获得PHP中的Youtube API OAuth快速参考。
答案 1 :(得分:0)
您的oauth2callback.php应该看起来像这样。它将获取代码并将其交换为访问令牌。
require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . '/Oauth2Authentication.php';
// Start a session to persist credentials.
session_start();
// Handle authorization flow from the server.
if (! isset($_GET['code'])) {
$client = buildClient();
$auth_url = $client->createAuthUrl();
header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
} else {
$client = buildClient();
$client->authenticate($_GET['code']); // Exchange the authencation code for a refresh token and access token.
// Add access token and refresh token to seession.
$_SESSION['access_token'] = $client->getAccessToken();
$_SESSION['refresh_token'] = $client->getRefreshToken();
//Redirect back to main script
$redirect_uri = str_replace("oauth2callback.php",$_SESSION['mainScript'],$client->getRedirectUri());
header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}
我在github上的示例项目中摘录了代码