Google API查询刷新令牌

时间:2014-11-02 20:45:08

标签: php google-api

我编写了一个脚本,可以使用PHP SDK成功地向Google查询访问令牌。

我的代码,

require_once('_/libs/google/apiclient/autoload.php');

$client_id = '<MY_ID>';
$client_secret = '<MY_SECRET>';
$redirect_uri = '<REDIRECT_URL>';

// Config my apps information 
$client = new Google_Client();
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setRedirectUri($redirect_uri);
$client->addScope("https://mail.google.com/");

// When google redirects with code swap for access token
if (isset($_GET['code'])) {
    $client->authenticate($_GET['code']);

    <------------- Try to get both tokens ----------------->
    $_SESSION['access_token'] = $client->getAccessToken();
    $_SESSION['refresh_token'] = $client->getRefreshToken();


    $redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
    header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));
}

一旦我获得如上所示的身份验证代码并通过getAccessToken();查询访问令牌,它将返回创建和到期时间。

但是,当我通过getRefreshToken();查询刷新令牌时,在将其输出到屏幕时不会返回任何内容。

有一个类似的问题here

问题似乎是让Google知道您需要离线访问,但该问题的答案不能转移到PHP SDK。

1 个答案:

答案 0 :(得分:1)

虽然我使用的是JavaScript,但我只是遇到了同样的问题。我通过将redirect_uri参数添加到初始令牌请求调用来解决它。

这是我的帖子和我的解决方案:Google API - Oauth 2.0 Auth token flow

为了澄清流程,要获得刷新令牌,您实际上必须请求获取代码&#39;来自Google(因此我的参数'response_type': 'code'),然后您使用该代码再次调用以获取访问令牌和刷新令牌。