2016-01-08 2 views
2

Я пытаюсь получить данное письмо из моего собственного почтового ящика (как владельца проекта) с помощью Google API 2.0.0 RC4 для PHP.failedPrecondition error при аутентификации с учетной записью сервиса API Google

У меня есть настройка проекта, загруженный файл аутентификации в формате JSON, и я включил API gmail в Google Developers Console.

Но когда я запускаю следующий код, я получаю ошибку «Bad Request» с причиной «failedPrecondition». Теперь это заставляет меня поверить, что с правами доступа что-то не так, но я не могу понять, что мне нужно делать здесь.

Код:

<?php 
    require_once("google-api-php-client-2.0.0-RC4/vendor/autoload.php"); 

    $client = new Google_Client(); 

    // set the scope(s) that will be used 
    $client->setScopes(["https://www.googleapis.com/auth/gmail.readonly"]); 

    $client->setApplicationName("MyProject"); 
    // set the authorization configuration using the 2.0 style 
    $client->setAuthConfigFile("myAuthFile.json"); 

    $gmailHandle = new Google_Service_Gmail($client); 

    $messages = $gmailHandle->users_messages->get("[email protected]", "12343445asd56"); 

    echo json_encode($messages); 

?> 

И полная ошибка выглядит следующим образом:

Fatal error: Uncaught exception 'Google_Service_Exception' with message '{ "error": { "errors": [ { "domain": "global", "reason": "failedPrecondition", "message": "Bad Request" } ], "code": 400, "message": "Bad Request" } } '

+0

Попробуйте использовать строку '' me '' вместо '' [email protected]'' в GET-запросе. Любая разница? – Tholle

+1

@Tholle К сожалению, это дало мне тот же результат. Что бы я сказал мне, если бы у меня было несколько админов, подключенных к моей учетной записи службы? –

+1

Это очень хороший вопрос, мои извинения. Я не заметил, что это была учетная запись службы в названии. Может быть, адрес электронной почты должен быть закодирован в url, а клиентская библиотека не сделает это за вас? Если нет, то я не знаю :('' @ "' => '"% 40 "' – Tholle

ответ

6

Я просто побежал в это и, наконец, нашел решение. Вы получаете эту ошибку, потому что используете учетную запись службы, не указав «объект» как часть конфигурации. Это необходимо, чтобы API знал, какой адрес электронной почты вы действуете, как при использовании учетной записи службы. Вы можете видеть, что попытки использовать эту тему в Google_Client :: createApplicationDefaultCredentials

Решение добавить следующую строку в коде после того, как вы назвали setAuthConfig()

$client->setConfig('subject', '[email protected]'); 

Обязательно используйте ключевое слово «я» при получении сообщений из папки «Входящие», поскольку теперь вы действуете как адрес электронной почты, который вы настроили как «субъект».

+0

Это похоже на трюк! Однако мне кажется странным, что я должен указать его как параметр в users_message :: get() и как конфигурационную переменную. –

+0

Спасибо за ответ, я смог в результате этого выберете python api. Та же основная проблема, но api-вызов отличается. –

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