how google data php api google-api google-cloud-storage gsutil

data - Sigue recibiendo 403 Prohibido de la API de Google(utilizando la biblioteca de cliente PHP v1)



upload data to google cloud storage (1)

De acuerdo ... Tengo que decir que no tengo suficiente experiencia en el uso de la API de Google, así que trataré de explicarlo con todos los detalles que pueda.

Necesito usar PHP para capturar los datos del almacenamiento en la nube, así que probé mi credencial con gsUtil para tomar datos del cubo y funciona; Pero cuando trato de usar la biblioteca de PHP para tomar datos, la API me respondió con este contenido:

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

Como no me dijo exactamente qué paso es incorrecto, entonces busqué alrededor de este sitio e intenté todo lo que parecía similar, pero la situación se mantiene.

Aquí está la Configuración en mi Google Dev. Consola:

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.

En 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 } }

Por favor dime si me perdí algo.


Ok, tengo el problema: debe suplantar a la cuenta de usuario que tiene el privilegio de acceder al alcance de la API que mencioné en el programa.

Por lo tanto, algunos códigos adicionales se deben agregar de la siguiente manera:

$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, otro problema resuelto! hora de avanzar para el próximo problema.