Продолжайте получать 403 Запрещено из Google API (с использованием клиентской библиотеки v1 для PHP)

Хорошо … Я должен сказать, что у меня недостаточно опыта использования API Google, поэтому я попытаюсь объяснить как можно больше деталей.

Мне нужно использовать PHP для захвата данных облачного хранилища, поэтому я попробовал свои учетные данные с помощью gsUtil для захвата данных из ведра, и он работает; Но когда я пытаюсь использовать библиотеку PHP для захвата данных, API ответил мне этим контентом:

"error": { "errors": [ { "domain": "global", "reason": "forbidden", "message": "Forbidden" } ], "code": 403, "message": "Forbidden" } 

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

Вот Конфигурация на моем Google Dev. Консоль:

 Api Manager > Overall > Enabled API: (a)Drive API. (b)Cloud Storage. (c)Cloud Storage JSON API. Api Manager > Credentials: (a)Api Key / OAuth 2.0 ID / Service Acc. Key are created. (b)Server IPs are added to the Api key's accept IP list. (c)Service Account have the Editor permission to the Project, service acc key is bind to this account too. 

В PHP:

 $email = '<my gmail>'; $scope = 'https://www.googleapis.com/auth/cloud-platform'; $apiKey = '<my api key>'; $oAuthId = '<OAuth ID>'; $serviceAcc = '<service account id>@developer.gserviceaccount.com'; $keyFileLocation = $_SERVER['DOCUMENT_ROOT']. "/<p12 file>"; $bucketId = '<my bucket id>'; $list = array(); $client = new Google_Client(); $client->setApplicationName("gp-api"); $client->setDeveloperKey($apiKey); $cred = new Google_Auth_AssertionCredentials ( $serviceAcc, array($scope), file_get_contents($keyFileLocation) ); $client->setAssertionCredentials($cred); if($client->getAuth()->isAccessTokenExpired()) $client->getAuth()->refreshTokenWithAssertion($cred); if($client->getAccessToken()) { $reqUrl = "https://www.googleapis.com/storage/v1/b/$bucketId/o/"; $request = new Google_Http_Request($reqUrl, 'GET', null, null); $httpRequest = $client->getAuth()->authenticatedRequest($request); if ($httpRequest->getResponseHttpCode() == 200) { $objects = json_decode($httpRequest->getResponseBody()); foreach ($objects->items as $object) { $list[] = $object->mediaLink; } } else { echo $httpRequest->getResponseHttpCode(); // This is where I got the 403 } } 

Скажите, пожалуйста, если я что-то пропустил.

Related of "Продолжайте получать 403 Запрещено из Google API (с использованием клиентской библиотеки v1 для PHP)"

Хорошо, у меня возникла проблема: она должна олицетворять учетную запись пользователя, имеющую привилегию доступа к области API, о которой я упоминал в программе.

Поэтому необходимо добавить дополнительные коды:

 $email = '<email account which could access that api>'; $scope = 'https://www.googleapis.com/auth/cloud-platform'; $apiKey = '<my api key>'; $oAuthId = '<OAuth ID>'; $serviceAcc = '<service account id>@developer.gserviceaccount.com'; $keyFileLocation = $_SERVER['DOCUMENT_ROOT']. "/<p12 file>"; $bucketId = '<my bucket id>'; $list = array(); $client = new Google_Client(); $client->setApplicationName("gp-api"); $client->setDeveloperKey($apiKey); $cred = new Google_Auth_AssertionCredentials ( $serviceAcc, array($scope), file_get_contents($keyFileLocation), 'notasecret', 'http://oauth.net/grant_type/jwt/1.0/bearer', $email ); по $email = '<email account which could access that api>'; $scope = 'https://www.googleapis.com/auth/cloud-platform'; $apiKey = '<my api key>'; $oAuthId = '<OAuth ID>'; $serviceAcc = '<service account id>@developer.gserviceaccount.com'; $keyFileLocation = $_SERVER['DOCUMENT_ROOT']. "/<p12 file>"; $bucketId = '<my bucket id>'; $list = array(); $client = new Google_Client(); $client->setApplicationName("gp-api"); $client->setDeveloperKey($apiKey); $cred = new Google_Auth_AssertionCredentials ( $serviceAcc, array($scope), file_get_contents($keyFileLocation), 'notasecret', 'http://oauth.net/grant_type/jwt/1.0/bearer', $email ); 

Woooooyaaaaa, другая проблема решена! время для перехода к следующей проблеме.