I am trying to use the google-api-php-client to upload videos to Youtube.
Since I need access to only one Youtube channel, not to many users channels, I have to authorize my app one time and store a refresh_token to achieve a not expiring access to the API.
The problem is that I don't get a refresh_token with the $client->getAccessToken()-call.
I only get the following values: token_type, expires_in, id_token, created
I created a "Client ID for web applications" using Google Console and use the following code:
<?php
$OAUTH2_CLIENT_ID = '<my client id>';
$OAUTH2_CLIENT_SECRET = '<my client secret>';
$client = new Google_Client();
$client->setApplicationName('<my app name>');
$client->setClientId($OAUTH2_CLIENT_ID);
$client->setClientSecret($OAUTH2_CLIENT_SECRET);
$client->setScopes('profile email https://www.googleapis.com/auth/youtube');
$client->setState('offline');
$redirect = filter_var('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'],
FILTER_SANITIZE_URL);
$client->setRedirectUri($redirect);
// Define an object that will be used to make all API requests.
$youtube = new Google_Service_YouTube($client);
if(isset($_GET['code'])) {
$client->authenticate($_GET['code']);
$accessToken = $client->getAccessToken();
var_dump($accessToken, json_decode($accessToken));
}
else {
$aurl = $client->createAuthUrl();
$aurl = str_replace('approval_prompt=auto', 'approval_prompt=force', $aurl);
echo '<a href="'.$aurl.'">'.$aurl.'</a>';
}
As you can see I already use $client->setState('offline') and insert apprival_prompt=force in the authURL.
I also tried to revoke access in my Google account manager multiple times and created a new API project.
Thank you in advance for telling me what I'm doing wrong :)