无法从google api OAuth2刷新令牌

时间:2015-06-08 12:00:20

标签: php google-oauth

这是我的php脚本RefreshToken.php

<?php
$url = 'https://accounts.google.com/o/oauth2/token';
$post_data = array(
                    'code'          =>   'xxxxxxxx',
                    'client_id'     =>   'xxxxxxxxxxx',
                    'client_secret' =>   'xxxxxxxxxxxxx',
                    'redirect_uri'  =>   'http://localhost/googleapi/AuthenticationCode.php',
                    'grant_type'    =>   'authorization_code',
                    );
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$result = curl_exec($ch);
$token = json_decode($result);

echo $token->refresh_token . "\n";
?>

运行PHP CLI

php -q RefreshToken.php

PHP注意:未定义的属性:第20行的/var/www/googleapi/RefreshToken.php中的stdClass :: $ refresh_token

1 个答案:

答案 0 :(得分:1)

默认情况下,Google OAuth2中未返回refresh_token

授权代码请求需要额外的参数(access_type):然后将使用access_token返回刷新令牌。

其他异常行为:refresh_token仅为用户返回一次。如果由于某种原因,该用户丢失了refresh_token,则用户需要打开Google Account Security Settings page并删除您应用的访问权限。这还不够:您的应用需要传递更多的一个参数(approval_prompt等于true),以表明我们正在强制请求新的refresh_token

更多信息:https://developers.google.com/accounts/docs/OAuth2WebServer#offline