Я тестирую API Gmail.
До сих пор я делал следующее:
Gmail API
.Client ID
client secret
.Итак, теперь, когда я запускаю файл quickstart.php, он дает ссылку. Когда я его открываю, появляется страница авторизации, на которой я разрешаю моему приложению обращаться к API Gmail.
Затем он перенаправляет на URI перенаправления, которые я объявил в настройке (добавив параметр кода).
В адресной строке это выглядит именно так:
HTTP://локальный/основной /gmail_callback код = my_code
Где главный мой контроллер и gmail_callback пока что просто пустая функция.
И это должно быть правильно, поскольку это мои настройки:
http://localhost
http://localhost/main/gmail_callback
Что мне делать дальше?
В основном я ошибался. Следуя этим инструкциям, достаточно получить токены:
https://developers.google.com/gmail/api/quickstart/php
Главное - получить доступ к файлу из командной строки, а не из приложения.
Следующим шагом в потоке является обмен авторизационным кодом для токена доступа (который также будет включать токен обновления, если вы запросили автономный доступ). Если вы используете https://developers.google.com/oauthplayground/ для выполнения потока вручную, вы сможете увидеть соответствующие URL-адреса. Существует вызов php-библиотеки, чтобы сделать то же самое, но я лично предпочитаю отправлять свой собственный HTTP, а не использовать библиотеку. Даже если вы используете библиотеку, все равно стоит потратить немного времени, чтобы понять поток HTTP, чтобы вы могли легче отлаживать любые проблемы, с которыми вы сталкиваетесь.
Несколько месяцев назад я сделал Oauth Gmail, у меня было что-то вроде этого:
В моей функции обратного вызова:
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);
}
И в моей функции gmail()
:
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']
содержат, например, последнее имя пользователя.