Intereting Posts
как ограничить определенный домен (ы) электронной почты, а также отправить форму Как я могу сделать ссылку на загрузку случайного имени php на странице? Постоянное соединение или объединение пулов в PHP54 + Nginx + PHPFPM + MongoDB CakePHP 2.0 – Как создать пользовательские страницы ошибок? Массив объединяется в ассоциативный массив Изменение размера изображения php-формы SQL QUERY многократный поиск в одной строке для поиска данных из другой строки в одной таблице Предупреждение: trim () ожидает, что параметр 1 будет строкой, массив указан в wp-includes / class-phpmailer.php в строке 973 проанализировать идентификатор видео YouTube с помощью preg_match Могу ли я перенести PHP-код с моего сайта на C, чтобы создать приложение для iOS? При извлечении имени исполнителя из файла XML отображается только 1 запись pdo-> query () возвращает два из каждого результата? Идентификатор автотеста H2 в строке php Как сохранить данные регистрации в двух таблицах с помощью проверки подлинности JWT в CakePHP 3 Как я могу ограничить доступ к скриптам моего сайта для других?

API-интерфейс API Google PHP: Недостаточное разрешение

У меня есть 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