Intereting Posts
Внедрение Facebook Credits – приложение не отвечает (ошибка синтаксического анализа signed_request при обратном вызове) Как выбрать наименьшее значение из нескольких столбцов с помощью PHP Есть ли причина, по которой мне нужно использовать stripslashes для представленных пользователем данных? Как использовать FB Graph для публикации сообщения на ленте (стене) PHP включает файловую стратегию Список файлов в каталоге и результат печати в формате JSON если соединение сохраняется, как читать до конца потока php Почему SQLSTATE : общая ошибка? Как добавить несколько строк в Zend_Db? добавлять активный класс к ссылкам меню, используя php Laravel 5.3 Ajax url не найден Шифрование в JavaScript и дешифрование с помощью PHP unset последний элемент массива Установите переменную среды в .htaccess и извлеките ее в PHP Как несериализировать данные сеанса в пользовательском обработчике

Google_Service_Directory – (403) Не авторизовано для доступа к этому ресурсу / api

У меня есть проблема, просто используя пример реальной версии PHP api и используя файл «service-account.php» в папке примеров.

оригинал предназначен для отображения «API книг», а с моей личной конфигурацией учетных данных он работает хорошо, но в моем xcase мне нужно получить доступ к службе directory.groups.get, чтобы иметь список учетных записей членов списка почтовых групп google, поэтому я меняю исходный код на это:

<?php session_start(); include_once "templates/base.php"; /************************************************ Make an API request authenticated with a service account. ************************************************/ require_once realpath(dirname(__FILE__) . '/../autoload.php'); /************************************************ ************************************************/ // MY ACCOUNT DATA HERE $client_id = 'xxx'; $service_account_name = 'xxx'; //Email Address $key_file_location = 'xxx.p12'; //key.p12 $groupKey = 'xxx'; echo pageHeader("My Service Account Access"); if ($client_id == '<YOUR_CLIENT_ID>' || !strlen($service_account_name) || !strlen($key_file_location)) { echo missingServiceAccountDetailsWarning(); } $client = new Google_Client(); $client->setApplicationName("Client_Library_Examples"); //$service = new Google_Service_Books($client); //ORIGINAL $service = new Google_Service_Directory($client); /************************************************ ************************************************/ if (isset($_SESSION['service_token'])) { $client->setAccessToken($_SESSION['service_token']); } $authArray = array( 'https://www.googleapis.com/auth/admin.directory.group', 'https://www.googleapis.com/auth/admin.directory.group.readonly', 'https://www.googleapis.com/auth/admin.directory.group.member', 'https://www.googleapis.com/auth/admin.directory.group.member.readonly' ); $key = file_get_contents($key_file_location); $cred = new Google_Auth_AssertionCredentials( $service_account_name, $authArray, //array('https://www.googleapis.com/auth/books'), //ORIGINAL $key ); $client->setAssertionCredentials($cred); if($client->getAuth()->isAccessTokenExpired()) { $client->getAuth()->refreshTokenWithAssertion($cred); } $_SESSION['service_token'] = $client->getAccessToken(); /************************************************ ************************************************/ //$optParams = array('filter' => 'free-ebooks'); //ORIGINAL $optParams = array('fields' => 'id'); //$results = $service->volumes->listVolumes('Henry David Thoreau', $optParams); //ORIGINAL $results = $service->groups->get($groupKey, $optParams); echo "<h3>Results Of Call:</h3>"; foreach ($results as $item) { //echo $item['volumeInfo']['title'], "<br /> \n"; //ORIGINAL echo "<pre>".print_r ($item, true)."</pre>"; } echo pageFooter(__FILE__); 

независимо от того, что я делаю, предоставляя авторизацию для API SDK и используя файлы и учетные данные, только что созданные в панели учетных данных API разработчика консоли, я получаю alwais ошибку 403.

Вот столбец ошибок:

 #0 /var/www/html/google_local/google-api-php-client-master/src/Google/Http/REST.php(41): Google_Http_REST::decodeHttpResponse(Object(Google_Http_Request)) #1 /var/www/html/google_local/google-api-php-client-master/src/Google/Client.php(546): Google_Http_REST::execute(Object(Google_Client), Object(Google_Http_Request)) #2 /var/www/html/google_local/google-api-php-client-master/src/Google/Service/Resource.php(190): Google_Client->execute(Object(Google_Http_Request)) #3 /var/www/html/google_local/google-api-php-client-master/src/Google/Service/Directory.php(1494): Google_Service_Resource->call('get', Array, 'Google_Service_...') #4 /var/www/html/google_local/googl in /var/www/html/google_local/google-api-php-client-master/src/Google/Http/REST.php on line 76 

Какие-либо предложения?

Спасибо, Роберто

Solutions Collecting From Web of "Google_Service_Directory – (403) Не авторизовано для доступа к этому ресурсу / api"

Корень проблемы заключается в том, что учетная запись службы не является администратором домена, поэтому она не может получить доступ к API каталогов Admin SDK. Вместо этого вам необходимо включить делегирование домена для вашей учетной записи службы, а затем выполнить учетную запись службы, выдающую себя за администратора домена, когда он делает запрос:

 $cred = new Google_Auth_AssertionCredentials( $service_account_name, $authArray, $key ); $cred->sub = "admin@yourdomain.com";