google examples con apis apiclient php google-api google-cloud-storage

php - examples - usando google api de almacenamiento en la nube con la clave del desarrollador(no OAuth2)



google/apiclient (2)

Quiero subir el archivo a google cloud desde algún comando de la consola. Como entiendo bien, no puedo hacerlo con OAuth2, así que necesito usar la tecla Api. Pero nada funciona. Intenté esto

$ch = curl_init(); $url = ''https://www.googleapis.com/upload/storage/v1/b/temp/o?uploadType=media&name=p11&key=''.$this->key; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, [ ''Authorization: key ''.$this->key ]); curl_setopt($ch, CURLOPT_POSTFIELDS, ''@/var/www/test.txt''); $content = curl_exec($ch); var_dump($content);

Hay un error:

{ "error": { "errors": [ { "domain": "global", "reason": "authError", "message": "Invalid Credentials", "locationType": "header", "location": "Authorization" } ], "code": 401, "message": "Invalid Credentials" } }

Y probé php-sdk

$client = new Google_Client(); $client->setApplicationName("alasdg"); $client->setDeveloperKey($this->key); $client->setScopes([''https://www.googleapis.com/auth/devstorage.read_write'']); $client->getAuth(); $storageService = new Google_Service_Storage($client); $buckets = $storageService->buckets->listBuckets(''temp''); var_dump($buckets);exit;

El error es:

Error calling GET https://www.googleapis.com/storage/v1/b?project=temp&key=afJwBJWucqvIU: (400) Invalid argument.

¿Puedo subir archivos sin OAuth2?


El Invalid Credentials válidas implica que su encabezado de Authorization no es válido de alguna manera, y necesita actualizar su token de acceso OAuth 2.0. Dado que la clave API no es un token de acceso válido, eso lo explicaría. Probablemente desee construir un encabezado que se parece a Authorization: Bearer ya29.xxxxxxxx donde el "ya29", etc. es un token de acceso. El php-sdk realiza el intercambio de credenciales en su nombre.

El segundo error que está obteniendo es muy probable que no haya ningún proyecto cuyo Project ID sea "temporal". Es un poco complicado, porque puedes asignar un "nombre descriptivo" a tu proyecto, pero ese nombre puede ser compartido entre muchos proyectos y no es un identificador único. Debe usar la ID del proyecto con nombre o, si no ha asignado la del proyecto, puede usar la ID numérica del proyecto, que está visible en la URL cuando la ve en https://console.developers.google. com /


Las operaciones de lectura y escritura siempre requerirán autenticación y autorización adecuadas, es decir, el token OAuth2 ( más información ). Con solo la clave API, está limitado al acceso anónimo de API de solo lectura (dado que el recurso de destino está marcado como público).