Gmail API: How to get access token?

喜你入骨 提交于 2019-12-12 21:25:53

问题


I am testing the Gmail API.

So far I have done the following:

  • I have created the project in the Google Developers Console
  • I have enabled the Gmail API.
  • I have created a new Client ID and the client secret.
  • In my PHP script I have installed the PHP Client library and followed the instructions for the setup in PHP.

So now when I run the file quickstart.php it gives a link. When I open it, it appears an authorization page where I authorize my application to access the Gmail API.

Then it redirects to the Redirect URIs that I have declared in the setup (adding the code parameter).

In the address bar it appears exactly this:

http://localhost/main/gmail_callback?code=MY_CODE

Where main is my controller and gmail_callback so far is just a blank function.

And it should be correct since these are my settings:

  • Javascript origins: http://localhost
  • Redirect URIs: http://localhost/main/gmail_callback

What do I do next?


回答1:


The next step in the flow is to exchange the Authorization Code for an Access Token (which will also include a Refresh Token if you requested offline access). If you use the https://developers.google.com/oauthplayground/ to execute the flow manually, you'll be able to see the URLs involved. There is a php library call to do the same thing, but I personally prefer to send my own HTTP rather than use a library. Even if you do use a library, it will still be worth spending a little time to understand the HTTP flow so you can more easily debug any problems you encounter.




回答2:


Basically I was approaching wrongly. Following these instructions is enough to get the tokens:

https://developers.google.com/gmail/api/quickstart/php

The main point is to access the file from the command line and not from the app.




回答3:


I made a Oauth Gmail some months ago, I got something like this :

In my callback function :

if (! isset($_GET['code'])) {
  $auth_url = $client->createAuthUrl();
  return $this->redirect($auth_url);
} else {
  $client->authenticate($_GET['code']);
  $_SESSION['access_token'] = $client->getAccessToken();
  $redirect_uri = Router::url('/', true).'Users/gmail';
  return $this->redirect($redirect_uri);
}

And in my gmail() function :

public function gmail(){ 
    require APPLIBS.'Google/src/Google'.DS.'autoload.php';
    $client = new Google_Client();
    $client->setAuthConfigFile('../Config/client_secrets.json');
    $client->addScope(Google_Service_Oauth2::PLUS_LOGIN);
    $client->addScope(Google_Service_Oauth2::USERINFO_EMAIL);
    if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
        $client->setAccessToken($_SESSION['access_token']);
        $oauth_service = new Google_Service_Oauth2($client);
        $data['Profile']['last_name']  = $oauth_service->userinfo->get()->familyName; 
    } 
} 

$data['Profile']['last_name'] contain the last_name of the user, for example.



来源:https://stackoverflow.com/questions/30613152/gmail-api-how-to-get-access-token

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!