I am currently facing this problem: once I authorized youtube to access my account and after saving the token in a file called "token.txt", everything runs smoothly until the token expires. My script is not able to refresh the token.
Here is the error message:
Caught Google service Exception 0 message is refresh token must be passed in or set as part of setAccessTokenStack trace is #0 /home/omqoygue/contest.diamante.live/vendor/google/apiclient/src/Client.php(321): Google\Client->fetchAccessTokenWithRefreshToken(NULL)#1 /home/omqoygue/contest.diamante.live/upload.php(40): Google\Client->refreshToken(NULL)#2 /home/omqoygue/contest.diamante.live/index.php(18): include('/home/omqoygue/...')#3 {main}This is the part where the token is created and storage in a file:
if (isset($_SESSION['token'])) {$client->setAccessToken($_SESSION['token']);$token = json_encode($_SESSION['token']);file_put_contents('token.txt', $token);foreach ($_SESSION['token'] as $key => $value) { echo '<code>' . $key . ":" . $value . "<br>" . '</code>';}This is the part where the token validity is checked. If it has expired it should be updated, but this does not happen.
$token = file_get_contents('token.txt');try { // Client init $client = new Google_Client(); $client->setApplicationName($application_name); $client->setClientId($client_id); $client->setAccessType('offline'); $client->setAccessToken($token); $client->setScopes($scope); $client->setClientSecret($client_secret); if ($client->getAccessToken()) { /** * Check to see if our access token has expired. If so, get a new one and save it to file for future use. */ if ($client->isAccessTokenExpired()) { $newToken = json_decode($client->getAccessToken()); $client->refreshToken($newToken->refreshToken); file_put_contents('token.txt', $client->getAccessToken()); }When the token expires I have to give again the permission to youtube to access my account.
I hope that someone can help me, I have already checked the other posts on the subject, but they are obsolete. Thanks to everyone.