2016-03-11 4 views
1

Для учетных данных я создал учетную запись разработчика на https://console.developers.google.com, я создал проект, а затем создал учетные данные из диспетчера API. Я использую пакет «google/apiclient»: «1.1. *». Я думаю, что это проблема с учетными данными.Google API - запрос на токен из Oauth2 возвращает нулевой токен

$OAUTH2_CLIENT_ID = 'XXXXX-rvm1l9b1nvht9je1ic0bbe05ab5gvhbg.apps.googleusercontent.com'; 
    $OAUTH2_CLIENT_SECRET = 'XXXXXXP90L_DLD3Nrc_rT4zGD'; 

    $client = new Google_Client(); 
    $client->setClientId($OAUTH2_CLIENT_ID); 
    $client->setClientSecret($OAUTH2_CLIENT_SECRET); 
    $client->setScopes('https://www.googleapis.com/auth/youtube'); 
    $redirect = url('/'); 
    $client->setRedirectUri($redirect); 


    $token = $client->getAccessToken(); 
    dd($token); 
+0

запрашивает у пользователя доступ? вы пытались сделать запрос против api? Если службы памяти не извлекают первый токен доступа, пока он действительно не нужен. – DaImTo

+0

Он перенаправляется на https://accounts.google.com. –

ответ

0

Я думаю, проблема заключается в том, что вы не делаете запрос в Google для аутентификации и возврата маркера. Вы должны сделать:

$client = new Google_Client(); 
$client->setClientId($OAUTH2_CLIENT_ID); 
$client->setClientSecret($OAUTH2_CLIENT_SECRET); 
$client->setScopes('https://www.googleapis.com/auth/youtube'); 
$redirect = url('/'); 
$client->setRedirectUri($redirect); 

//redirect to google server to get the token 
return Redirect::to($client->createAuthUrl()); 

Если аутентификация прошла успешно, Google перенаправит вас на страницу, установить с $client->setRedirectUri($redirect).

В этой странице вы можете:

//authenticate using the parameter $_GET['code'] you got from google server 
$client->authenticate($request->input('code')); 

//get the access token 
$tokens = $client->getAccessToken(); 
+0

Спасибо, это работает! –

+0

приветствую :) – Moppo

+0

Я не знаю почему, но это не работает для меня. Не могли бы вы посмотреть на мой вопрос, пожалуйста? Я также обновил то, что я пробовал, основываясь на вашем ответе. http://stackoverflow.com/questions/41838484/google-oauth-access-token-not-refresh-token-null – wordSmith

4

Совет:

Не используйте:

$client->authenticate($authcode); 
$token = $client->getAccessToken(); 

Использование:

$token = $client->fetchAccessTokenWithAuthCode($authcode); 

Это, по крайней мере, позволит вам чтобы увидеть сообщение об ошибке, если вы сбросили $token. В примере «Не использовать:», если шаг authenticate() завершился с ошибкой, getAccessToken() может вернуть значение null. Плохая работа по API здесь.

+1

Спасибо за это. У меня были большие проблемы с отладкой без сообщений об ошибках – 365SplendidSuns