Google Blogger V3 API OAuth больше не работаетPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Google Blogger V3 API OAuth больше не работает

Сообщение Anonymous »

Я использую API Blogger V3 уже много лет. Я использую официальную PHP-библиотеку googleapis.com для получения данных и управления потоком OAuth2. Вот уже несколько дней я больше не могу разрешить пользователям авторизовать мое приложение.
Я много занимался отладкой и читал в Интернете, и вот мои выводы:
  • access_token, который я получаю после того, как пользователь авторизовал нас через экран разрешений OAuth, действителен. Я могу использовать библиотеку Google, чтобы получить с ее помощью информацию о пользователе.

Код: Выделить всё

$oauth = new Google_Service_Oauth2($client);
$userinfo = $oauth->userinfo->get();

Код: Выделить всё

stdClass#1
(
[access_token] => '{TOKEN}'
[expires_in] => 3599
[refresh_token] => '{REFRESH_TOKEN}'
[scope] => 'https://www.googleapis.com/auth/blogger https://www.googleapis.com/auth/userinfo.profile'
[token_type] => 'Bearer'
[id_token] => '{ID_TOKEN}'
)
Я могу легко получить информацию и контент Blogger в Google Playground, когда ввожу access_token, который я получил с помощью потока OAuth на своем сервере. Таким образом, access_token, похоже, работает в самой среде Google.
Однако, когда я пытаюсь запросить API Blogger V3 со своего сервера, я постоянно сталкиваюсь с ошибкой 403.
Например:

Ваш клиент не имеет
разрешения на получение URL /v3/blogs/byurl с этого сервера. Это все, что мы знаем.

Вот мой PHP-код (Yii 1) для потока OAuth2:
Начать процесс аутентификации:

Код: Выделить всё

$client = new \Google_Client();
$client->setClientId({ID});
$client->setClientSecret({SECRET});
$client->setRedirectUri({CALLBACK_URL});
$client->setAccessType('offline');
$client->setPrompt('consent');
$client->addScope([
'https://www.googleapis.com/auth/blogger',
'https://www.googleapis.com/auth/userinfo.profile',
]);

$authUrl = $client->createAuthUrl();
$this->redirect($authUrl);
Обработка обратного вызова:

Код: Выделить всё

if (!isset($_GET['code'])) {
throw new CHttpException(400, 'No code provided');
}

$client->setClientId({ID});
$client->setClientSecret({SECRET});
$client->setRedirectUri({CALLBACK_URL});
$client->setAccessType('offline');

$token = $client->fetchAccessTokenWithAuthCode($_GET['code']);

if (isset($token['error'])) {
throw new CHttpException(400, 'Google auth error: ' . $token['error_description']);
}

// For test purposes the token is just saved to session instead of DB
Yii::app()->session['google_token'] = $token;

$client->setAccessToken($token);

$oauth = new Google_Service_Oauth2($client);

// This works. An object with the user information is returned
$userinfo = $oauth->userinfo->get();

$service = new Google_Service_Blogger($client);

// this doesn't work and returns the 403 error
$blogs = $service->blogs->getByUrl([
'url'=> '{BLOG_URL}'
]);
Отправка прямых запросов Guzzle с использованием access_token в качестве носителя в заголовке авторизации возвращает ту же ошибку:

Код: Выделить всё

$client = new \GuzzleHttp\Client();
$res = $client->get('https://www.googleapis.com/blogger/v3/users/self/blogs', [
'headers' => [
'Authorization' => 'Bearer {ACCESS_TOKEN}'
]
]);

/// returns 403
echo $res->getBody();
Я действительно заблудился. На панели управления Google Cloud Console нет уведомлений. Похоже, что API Blogger просто сломался без предупреждения.
Кто-нибудь еще имеет такой же опыт или может предложить помощь? Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/796 ... ng-anymore
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»