2017-10-18 15 views
0

Cela me conduit mentale. J'ai une application Web et un compte Google associé. Je souhaite que l'application Web utilise ce lecteur Google et ce lecteur Google UNIQUEMENT ... DE MANIÈRE PERMANENTE. J'utilise google/apiclient:^2.0 J'ai configuré un ID client OAuth 2.0 et téléchargé le fichier JSON.PHP et Google Drive frustration d'authentification

J'ai ceci:

$this->client = new \Google_Client(); 
$this->client->setClientId('blahblahblah.apps.googleusercontent.com'); 
$this->client->setAuthConfig(base_path() . '/resources/assets/client_secret.json'); 
$this->client->setApplicationName('My Web App'); 
$this->client->setRedirectUri('somewhere'); 
$this->client->setScopes('https://www.googleapis.com/auth/drive'); 
return $this->client; 

Maintenant, quand je lance ...

$authUrl = $this->client->createAuthUrl(); 
echo '<a href="'.$authUrl.'">Go</a>'; 

Et authentifie je reçois un code ...

Maintenant, ma question est ... ce est-ce que je fais avec ce code?

J'ai essayé ... $this->client->authenticate('code here'); et aussi $accessToken = $client->fetchAccessTokenWithAuthCode('code here);

Je continue de recevoir soit dailyLimitExceededUnreg ou Invalid token format

Je suis vraiment confus et frustré avec l'API d'authentification Google et les documents semblent sortir de rendez-vous amoureux.

Tout conseil dans la bonne direction serait incroyable.

Merci

+0

consultez cette adresse: https: //developers.google.com/api-client-bibliothèque/php/auth/application-web – madalinivascu

+0

voir https://stackoverflow.com/questions/19766912/how-do-i-authorise-an-app-web-or-installed-without-user -intervention-canonique – pinoyyid

Répondre

0

Pour obtenir le jeton d'accès dont vous avez besoin ce qui suit dans vous acheminez « quelque part »:

$client->authenticate($_GET['code']); 
$access_token = $client->getAccessToken(); 

le jeton d'accès est utilisé pour vous connecter dans votre lecteur de google

travailler avec google drive, vous devez instancier Google_Service_Drive

$drive = new Google_Service_Drive($client); 
$files = $drive->files->listFiles(array())->getItems(); 

Remarque: les jetons d'accès sont une forme d'utilisateur + mot de passe qui expire au fil du temps. Vous devez donc en récupérer de nouveaux s'ils expirent

0

J'ai fait quelque chose comme ça il y a quelques années et j'ai eu quelques problèmes avec la documentation. J'ai parcouru le code pour le trouver pour vous. Je l'ai utilisé pour la liste de contacts Gmail mais la procédure est la même. Je vais essayer d'expliquer le processus que j'ai traversé et je pense que cela devrait vous aider.

Ceci est la partie où vous êtes. Vous obtenez le code Google vous envoyer et juste enregistrer dans une variable de session

if (isset($_GET['code'])) { 
    $auth_code = $_GET["code"]; 
    $_SESSION['google_code'] = $auth_code; 
} 

Maintenant, vous devrez poster à oauth2 pour authentifier et obtenir votre acesstoken

$auth_code = $_SESSION['google_code']; 
$max_results = 300; 
$fields=array(
    'code'=> urlencode($auth_code), 
    'client_id'=> urlencode($google_client_id), 
    'client_secret'=> urlencode($google_client_secret), 
    'redirect_uri'=> urlencode($google_redirect_uri), 
    'grant_type'=> urlencode('authorization_code') 
); 

$post = ''; 
foreach($fields as $key=>$value) 
{ 
    $post .= $key.'='.$value.'&'; 
} 

$post = rtrim($post,'&'); 
$result = curl('https://accounts.google.com/o/oauth2/token',$post); 
$response = json_decode($result); 

$accesstoken = $response->access_token; 

Avec le jeton que vous serez capable de rouler le point de terminaison de Google Drive et obtenir vos résultats

$url = 'https://www.google.com/m8/feeds/contacts/default/full?max-results='.$max_results.'&alt=json&v=3.0&oauth_token='.$accesstoken; 
$xmlresponse = curl($url);