У меня есть PHP-код, который использует API-интерфейс Google PHP Client для использования службы Drive.
<?php require_once 'Google/Client.php'; require_once 'Google/Service/Drive.php'; const CLIENT_ID = '[MYCLIENTID]'; const SERVICE_ACCOUNT_NAME = '[MYSERVICEACCOUNID]'; // Make sure you keep your key.p12 file in a secure location, and isn't // readable by others. const KEY_FILE = './[MYPRIVATEKEY].p12'; // Load the key in PKCS 12 format (you need to download this from the // Google API Console when the service account was created. $client = new Google_Client(); $client->setApplicationName("Google Drive Sample"); $key = file_get_contents(KEY_FILE); $client->setClientId(CLIENT_ID); $client->setAssertionCredentials(new Google_Auth_AssertionCredentials( SERVICE_ACCOUNT_NAME, array('https://www.googleapis.com/auth/drive'), $key) ); $client->setClientId(CLIENT_ID); if ($client->getAuth()->isAccessTokenExpired()) { $client->getAuth()->refreshTokenWithAssertion(); } // Get the json encoded access token. $token = $client->getAccessToken(); echo "<pre>"; $service = new Google_Service_Drive($client); $service->apps->listApps(); echo "</pre>"; ?>
У меня были установлены CLIENT_ID, SERVICE_ACCOUNT_NAME и KEY_FILE. Когда я запускаю код, я получаю следующие сообщения об ошибках:
Fatal error: Uncaught exception 'Google_Service_Exception' with message 'Error calling GET https://www.googleapis.com/drive/v2/apps: (403) Insufficient Permission' in C:\xampp\htdocs\oauth\Google\Http\REST.php:79 Stack trace: #0 C:\xampp\htdocs\oauth\Google\Http\REST.php(44): Google_Http_REST::decodeHttpResponse(Object(Google_Http_Request)) #1 C:\xampp\htdocs\oauth\Google\Client.php(499): Google_Http_REST::execute(Object(Google_Client), Object(Google_Http_Request)) #2 C:\xampp\htdocs\oauth\Google\Service\Resource.php(195): Google_Client->execute(Object(Google_Http_Request)) #3 C:\xampp\htdocs\oauth\Google\Service\Drive.php(1281): Google_Service_Resource->call('list', Array, 'Google_Service_...') #4 C:\xampp\htdocs\oauth\drive_client.php(41): Google_Service_Drive_Apps_Resource->listApps() #5 {main} thrown in C:\xampp\htdocs\oauth\Google\Http\REST.php on line 79
Что может быть неправильным с кодом?
Для метода списка приложений # требуется авторизация с областью https://www.googleapis.com/auth/drive.apps.readonly
. Просто добавьте его в массив областей:
$client->setAssertionCredentials(new Google_Auth_AssertionCredentials( SERVICE_ACCOUNT_NAME, array('https://www.googleapis.com/auth/drive', 'https://www.googleapis.com/auth/drive.apps.readonly'), $key) );
Вы даже должны отключить Google api для своего проекта в консоли разработчика под Apis & auth