Проблемы с реализацией служебной учетной записи с помощью google-api-php-client

Это, казалось, исправилось само собой ... примерно через час я нажал F5, и это сработало, я увидел список названий книг.

Поэтому я скопировал файл и изменил его, чтобы получить список всех пользователей.

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');

session_start();
include_once "templates/base.php";

set_include_path("../src/" . PATH_SEPARATOR . get_include_path());
require_once 'Google/Client.php';
require_once 'Google/Service/Directory.php';

$client_id = '118xxx.apps.googleusercontent.com';
$service_account_name = '[email protected]';
$key_file_location = '/Path/ServiceAccount-privatekey.p12';

echo pageHeader("Service Account Access");

$client = new Google_Client();
$client->setApplicationName("Client_Library_Examples");
$service = new Google_Service_Directory($client);

if (isset($_SESSION['service_token'])) {
  $client->setAccessToken($_SESSION['service_token']);
}
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials(
    $service_account_name,
    array('https://www.googleapis.com/auth/admin.directory.user.readonly'),
    $key
);
$cred->sub = "[email protected]";
$client->setAssertionCredentials($cred);
if($client->getAuth()->isAccessTokenExpired()) {
  $client->getAuth()->refreshTokenWithAssertion($cred);
}
$_SESSION['service_token'] = $client->getAccessToken();

$results = $service->users->listUsers();
echo "<h3>Results Of Call:</h3>";
print_r($results);
echo pageFooter(__FILE__);

Однако, когда я запускаю этот код, я получаю

Неустранимая ошибка: необработанное исключение «Google_Service_Exception» с сообщением «Ошибка при вызове GET https://www.googleapis.com/admin/directory/v1/users: (400) Bad Request в /var/www/common/google-api-php-client-master/src/Google/Http/REST.php:80

Еще раз спасибо за ваше понимание.


person user186057    schedule 28.02.2014    source источник


Ответы (2)


Я могу помочь вам избавиться от ошибки 400 Bad Request:

Вызов $service->users->listUsers() нуждается в некоторых параметрах — как минимум domain или customer.

E.g. $service->users->listUsers( Array('domain' => 'test.com') )

Это ваша непосредственная проблема - ваш вызов этого API неполный.

Однако после этого момента я готов поспорить, что у вас возникнут проблемы с разрешениями. В настоящее время я пытаюсь распутать их в своем проекте!

person Dan Lester    schedule 06.03.2014

Дэн Лестер и OP: Я тоже столкнулся с этим и, наконец, смог заставить его работать. По сути, вам нужно установить домен, тип представления, и суб. (Где sub — это пользователь в домене, из-за которого вы можете сделать запрос.) В библиотеку php был добавлен код loadServiceAccountJson() для настройки авторизации службы, но он не устанавливает sub в своем вызове Google_Auth_AssertionCredentials, поэтому это бесполезно.

Рабочий код здесь: клиентская библиотека Google php loadServiceAccountJson не работает - исправить прилагается

person Tim Curtin    schedule 27.07.2015