Google Oauth刷新令牌-invalid_grant

时间:2019-03-17 02:33:28

标签: api oauth token refresh google-api-php-client

我正在尝试使用PHP和Google的curl获取刷新令牌。我一直在关注这个documentation

以下内容成功地遵循了说明,以获取最终获得刷新令牌所需的“代码”,因此我知道此设置正确,并且正在使用适当的重定向uri。使用Google给我的值填写我的curl代码,我创建了以下代码:

$post = ["grant_type" => "authorization_code", "code" => "my recovered google code", "client_id" => "my oauth id", "client_secret" => "my client secret", "redirect_uri" => "my redirect id"];

$ch = curl_init('https://accounts.google.com/o/oauth2/token');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($ch);

// close the connection, release resources used
curl_close($ch);

// log my returned tokens
file_put_contents('./tokenLogger-'.date("H.i.s").'.log', $result, FILE_APPEND);

我得到的日志文件全部是这样:

{
  "error": "invalid_grant",
  "error_description": "Bad Request"
}

我浪费了两天,可以真正使用一些指导。我正在遵循Google的指示,但对我而言却失败了。任何见解都将非常有用。谢谢!!

1 个答案:

答案 0 :(得分:0)

这让人很沮丧,但事实证明它相当简单。尝试获取刷新令牌时,您必须从Google获取用于获取刷新令牌的“代码”。此“代码”仅适合一次使用!!如果尝试使用它,并且代码中有错误,则必须先生成一个新的“代码”,然后才能重试。无论成功还是失败,您都只会一枪。我的印象是直到成功,我才能继续使用它。那是不正确的。