@Muramidaza

Как получить токен OAuth2 для отправки push уведомлений через FCM?

Гугл сменили способ отправки пуш-уведомлений и перешли на авторизацию через OAuth2

То есть в заголовке запроса на отправку пуша сейчас нужно отправлять "Authorization", "Bearer " + token

В инструкции по миграции указано что нужно получить токен с помощью библиотеки google-auth-library-php
И для этого нужно получить файл credentials.json - я его получил по инструкции

Попробовал код из примера:

putenv('GOOGLE_APPLICATION_CREDENTIALS=/var/www/html/credentials.json');

        $scopes = ['https://www.googleapis.com/auth/drive.readonly'];

        $middleware = ApplicationDefaultCredentials::getMiddleware($scopes);
        $stack = HandlerStack::create();
        $stack->push($middleware);

        $client = new Client([
            'handler' => $stack,
            'base_uri' => 'https://www.googleapis.com',
            'auth' => 'google_auth'  // authorize all requests
        ]);

        $response = $client->get('drive/v2/files');


Пришел ответ:

{
  "kind": "drive#fileList",
  "etag": "\"skD00QgZZ0FB6U5ufzrrxrFjqyA\"",
  "selfLink": "https://www.googleapis.com/drive/v2/files",
  "incompleteSearch": false,
  "items": []
}


Но токена тут нет. Как правильно получить OAuth токен для отправки пуш-уведомлений?
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
fetchAuthToken

<?php
require_once 'vendor/autoload.php';

use Google\Auth\Credentials\ServiceAccountCredentials;
use GuzzleHttp\Client;

$serviceAccountFile = '/path-to-credentials.json';
$scopes = ['https://www.googleapis.com/auth/drive.readonly'];
// Учетка
$credentials = new ServiceAccountCredentials(
    $scopes,
    $serviceAccountFile
);
// Получаем токен
$token = $credentials->fetchAuthToken();
$accessToken = $token['access_token'];

echo 'OAuth2 Token: ' . $accessToken;
echo "\n";

// Ну тут по примеру запрашиваем файлы с гугл диска
$client = new Client([
    'base_uri' => 'https://www.googleapis.com',
    'headers' => [
        'Authorization' => 'Bearer ' . $accessToken
    ]
]);

$response = $client->get('/drive/v2/files');
print_r((string) $response->getBody());
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы