Sei sicuro le credenziali sono OK?
Si prega di provare la seguente procedura per assicurarsi di avere le giuste credenziali.
Creare le chiavi API
Vai alla developer's console e procedere come segue:
- Seleziona il tuo progetto
- Scegliere la voce di menu "API & auth"
- Scegliere la voce di menu " App registrata "
- Registrare un'applicazione di tipo" applicazione web "
- Scegli una delle seguenti opzioni, a seconda del tipo di app che stai creando. linguaggi lato server dovrebbe utilizzare questa opzione:
- chiave per le applicazioni del server (con bloccaggio IP)
Ottenere token di accesso & token di aggiornamento
Creare un file contiene il seguente codice:
<?php
if (isset($_GET['code'])) {
// try to get an access token
$code = $_GET['code'];
$url = 'https://accounts.google.com/o/oauth2/token';
$params = array(
"code" => $code,
"client_id" => YOUR_CLIENT_ID,
"client_secret" => YOUR_CLIENT_SECRET,
"redirect_uri" => 'http://' . $_SERVER["HTTP_HOST"] . $_SERVER["PHP_SELF"],
"grant_type" => "authorization_code"
);
$ch = curl_init();
curl_setopt($ch, constant("CURLOPT_" . 'URL'), $url);
curl_setopt($ch, constant("CURLOPT_" . 'POST'), true);
curl_setopt($ch, constant("CURLOPT_" . 'POSTFIELDS'), $params);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if ($info['http_code'] === 200) {
header('Content-Type: ' . $info['content_type']);
return $output;
} else {
return 'An error happened';
}
} else {
$url = "https://accounts.google.com/o/oauth2/auth";
$params = array(
"response_type" => "code",
"client_id" => YOUR_CLIENT_ID,
"redirect_uri" => 'http://' . $_SERVER["HTTP_HOST"] . $_SERVER["PHP_SELF"],
"scope" => "https://www.googleapis.com/auth/plus.me"
);
$request_to = $url . '?' . http_build_query($params);
header("Location: " . $request_to);
}
Ora, sostituire YOUR_CLIENT_ID
e YOUR_CLIENT_SECRET
con l'ID client e il segreto del client.
Assicurarsi che l'ambito sia corretto. Ad esempio, dovrebbe essere https://www.googleapis.com/auth/analytics
se si desidera ottenere l'accesso ad Analytics.
Se si esegue il file, è necessario ottenere una schermata di approvazione OAuth2.
Se ora si preme Accept
, si dovrebbe ottenere un risultato simile al seguente:
{
"access_token" : YOUR_ACCESS_TOKEN,
"token_type" : "Bearer",
"expires_in" : 3600,
"refresh_token" : YOUR_REFRESH_TOKEN
}
Il risultato può contenere campi aggiuntivi, a seconda di quale portata si sta applicando per.
Collegamento con i sistemi di Google in background
Una volta che il sopra per lavorare, l'applicazione deve implementare il seguente flusso di lavoro:
1) Verificare se l'input contiene un parametro GET chiamato "codice". Se è presente "codice", ottieni un nuovo token di accesso e ripeti questo passaggio (aggiorna la pagina) Se "codice" non è presente, vai al passaggio 2.
2) Controlla se hai le credenziali memorizzate per il tuo servizio . Se sono presenti credenziali, controlla se il tuo token di accesso è scaduto o scadrà presto. Quindi andare al passaggio 3. Se le credenziali non sono presenti, andare al percorso auth del servizio per ottenere il codice di autenticazione e tornare al passaggio 1 (assicurarsi che Google reindirizzi al proprio URL corrente).
3) Se è necessario eseguire l'aggiornamento, aggiornare la pagina e tornare al passaggio 1. Se l'aggiornamento non è necessario, si è pronti a fare effettivamente ciò che si voleva fare in primo luogo.
La libreria PHP di Google si prende cura del flusso di oAuth2 per te. Se stai utilizzando la loro libreria, ognuno dei passaggi del processo in 3 passaggi è gestito dalla biblioteca e dovresti essere in grado di fare subito tutto ciò che vuoi fare con i servizi di Google. Io stesso uso questa strategia in my Google Adwords dashboard.
È tuttavia possibile scrivere la libreria personalizzata e collegarsi direttamente al servizio. Di seguito è riportato un codice di sviluppo da un progetto che ho scritto alcuni mesi fa. Anche se non funziona immediatamente (dal momento che si tratta di un controller che fa parte di un'applicazione più grande), dovrebbe aiutarti a capire il flusso che la biblioteca di Google si prende cura di te.
namespace Application;
class Controller_API_Google_Youtube extends Controller_API {
public function read() {
$scope = "https://www.googleapis.com/auth/youtube";
$this->doOauth($scope);
}
function doOauth($scope) {
$oauth2Credentials = JSON_File::load(__DIR__ . DIRECTORY_SEPARATOR . 'Config.json');
$paths = array(
'token' => 'https://accounts.google.com/o/oauth2/token',
'auth' => "https://accounts.google.com/o/oauth2/auth"
);
$refreshtime = 300;
if (isset($_GET['code'])) {
// Get access code
$query = $_GET;
unset($query['code']);
if (count($query) > 0) {
$query = '?' . http_build_query($query);
} else {
$query = '';
}
$client = \PowerTools\HTTP_Client::factory(
array(
'maps' => array(
'url' => $paths['token'],
'returntransfer' => 1,
'post' => true,
'postfields' => array(
'code' => $_GET['code'],
"client_id" => $oauth2Credentials['client_id'],
"client_secret" => $oauth2Credentials['client_secret'],
"redirect_uri" => HTTP_PROTOCOL . URL_PATH . $query,
"grant_type" => "authorization_code"
)
)
)
)->execute();
$responses = $client->getResponses();
$response = array_pop($responses);
$info = $response['maps']->getInfo();
$content = $response['maps']->getContent();
if ($info['http_code'] === 200) {
$output = JSON::decode($content);
$oauth2Credentials[$scope] = array();
$oauth2Credentials[$scope]['expires'] = time() + $output['expires_in'];
$oauth2Credentials[$scope]['access_token'] = $output['access_token'];
$oauth2Credentials[$scope]['refresh_token'] = $output['refresh_token'];
file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . 'Config.json', JSON::encode($oauth2Credentials));
header("Location: " . HTTP_PROTOCOL . URL_PATH . $query);
} else {
echo "Something went wrong";
}
} elseif (!isset($oauth2Credentials[$scope])) {
// Get auth code
header("Location: " . $paths['auth'] . '?' . http_build_query(
array(
"response_type" => "code",
"client_id" => $oauth2Credentials['client_id'],
"redirect_uri" => HTTP_PROTOCOL . DOMAIN_PATH,
"scope" => $scope
)
));
} elseif ($oauth2Credentials[$scope]['expires'] - $refreshtime < time()) {
// Refresh access code
$client = \PowerTools\HTTP_Client::factory(
array(
'maps' => array(
'url' => $paths['token'],
'returntransfer' => 1,
'post' => true,
'postfields' => array(
"client_id" => $oauth2Credentials['client_id'],
"client_secret" => $oauth2Credentials['client_secret'],
"refresh_token" => $oauth2Credentials[$scope]['refresh_token'],
"grant_type" => "refresh_token"
)
)
)
)->execute();
$responses = $client->getResponses();
$response = array_pop($responses);
$info = $response['maps']->getInfo();
$content = $response['maps']->getContent();
if ($info['http_code'] === 200) {
$output = JSON::decode($response['maps']->getContent());
$oauth2Credentials[$scope]['expires'] = time() + $output['expires_in'];
$oauth2Credentials[$scope]['access_token'] = $output['access_token'];
file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . 'Config.json', JSON::encode($oauth2Credentials));
$this->read();
} else {
$this->output = array("error" => "Something went wrong");
}
} else {
$this->doSomethinguseful($oauth2Credentials, $scope);
}
return $this;
}
function doSomethinguseful($oauth2Credentials, $scope) {
// https://developers.google.com/youtube/v3/sample_requests?hl=nl
$client = \PowerTools\HTTP_Client::factory(
array(
'maps' => array(
'useragent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13',
'url' => 'https://www.googleapis.com/youtube/v3/channels?part=contentDetails&mine=true',
'returntransfer' => true,
'httpheader' => array(
'Authorization: Bearer ' . $oauth2Credentials[$scope]['access_token'],
'Accept-Encoding: gzip, deflate'
)
)
)
)->execute();
$responses = $client->getResponses();
$response = array_pop($responses);
$content = $response['maps']->getContent();
$this->output = JSON::decode(gzdecode($content));
}
}
quello che l'accesso ti è concedere l'account di servizio? amministratore super o amministratore delegato? – DaImTo
Dove posso trovare questo? Sono in grado di accedere alla console degli sviluppatori, ma non riesco a trovare i ruoli utente. – global
@DalmTo Ora ho cambiato la lingua in inglese e posso confermare che l'utente è Super Admin. – global