0

Я создал свою учетную запись службы, получил полномочия private_key и делегированных доменов.Google OAuth 2.0 с учетной записью службы с PHP: «Ошибка формата недопустимого формата токена»

Вот мой код попытка аутентификации с учетной записью службы, но получить ту же «ошибку Недопустимого маркера формата»:

session_start(); 
include_once 'google-api-php/vendor/autoload.php'; 

function getClient() { 
$client = new Google_Client(); 
$client->setApplicationName('theName'); 
$client->setScopes('https://www.googleapis.com/auth/admin.directory.user.readonly'); 
$client->setAccessType('offline'); 
$client->setSubject('[email protected]'); 
$client->setAuthConfig('private_key.json'); 

// Load previously authorized credentials from a file. 
$credentialsPath = 'private_key.json'; 
if (file_exists($credentialsPath)) { 
    $accessToken = json_decode(file_get_contents($credentialsPath), true); 
} 
else { 
    // Request authorization from the user. 
    $authUrl = $client->createAuthUrl(); 
    printf("Open the following link in your browser:\n%s\n", $authUrl); 
    print 'Enter verification code: '; 
    $authCode = trim(fgets(STDIN)); 

    // Exchange authorization code for an access token. 
    $accessToken = $client->fetchAccessTokenWithAuthCode($authCode); 

    // Store the credentials to disk. 
    if(!file_exists(dirname($credentialsPath))) { 
     mkdir(dirname($credentialsPath), 0700, true); 
    } 
    file_put_contents($credentialsPath, json_encode($accessToken)); 
    printf("Credentials saved to %s\n", $credentialsPath); 
} 

$client->setAccessToken($accessToken); 

// Refresh the token if it's expired. 
if ($client->isAccessTokenExpired()) { 
    $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken()); 
    file_put_contents($credentialsPath, json_encode($client->getAccessToken())); 
} 
return $client; 
} 

А вот скриншот того, что я получаю от $ маркера доступа непосредственно перед

$client->setAccessToken($accessToken); 

с самой ошибки:

https://postimg.org/image/ajgan5y27/

Любая помощь будет оценена по достоинству. Благодаря!

ответ

7

Проблема была устаревшая документация google api. Оказывается, новая версия для функции «getClient» нужно только это работать в случае, если кто имеет проблемы:

function getClient() { 
    $client = new Google_Client(); 
    $client->setAuthConfig('private_key.json'); 
    $client->setApplicationName('theName'); 
    $client->setScopes(Google_Service_Sheets::SPREADSHEETS_READONLY); 
    return $client; 
} 

Не нужно $ client-> setAccessToken(); на всех ...

Хорошая работа Google ... Это устаревшие и ненадежные страницы документации, которые я взял этот код из:

https://developers.google.com/admin-sdk/directory/v1/quickstart/php и https://developers.google.com/api-client-library/php/auth/service-accounts

Еще одна вещь: в случае, если вам необходимо сыграть с Google Таблицами, вам может потребоваться добавить идентификатор службы учетной записи ([email protected]) в документ документа Google, из которого вы хотите извлечь информацию.

+0

Это должно быть принято как правильный ответ. – Alexey

Смежные вопросы