使用CURL获取Google Client API访问令牌

时间:2014-09-12 12:11:52

标签: php curl access-token google-api-client

过去几天我一直在尝试使用Google Oauth2获取访问令牌和刷新令牌,但却没有到达任何地方。

文档很垃圾,我找不到任何有效的例子。

我刚刚开始使用CURL尝试获取访问代码并刷新令牌,但我不断收到错误。

我尝试过使用此

// init the resource
$url = 'https://accounts.google.com/o/oauth2/token';
$ch = curl_init($url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
curl_setopt($ch, CURLOPT_FAILONERROR, false);  
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); 

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/x-www-form-urlencoded',
    'Content-length: 0'
));

curl_setopt($ch, CURLOPT_POSTFIELDS,
    'code=' . urlencode('AUTHORISATION_CODE') . '&' .
    'client_id=' . urlencode('MY_CLINET_ID.apps.googleusercontent.com') . '&' .
    'client_secret=' . urlencode('MY_CLIENT_SECRET') . '&' .
    'redirect_uri=http://www.example.com/' . '&' .
    'grant_type=authorization_code'
); 

// execute
$output = curl_exec($ch);

echo $output;

// free
curl_close($ch);

但我得到了这个回复

{ 
   "error" : "invalid_request", 
   "error_description" : "Required parameter is missing: grant_type"
}

我尝试从命令行运行CURL

curl --data "code=AUTHORISATION_CODE&client_id=MY_CLIENT_ID.apps.googleusercontent.com&client_secret=MY_CLIENT_SECRET&redirect_uri=http://www.example.com/&grant_type=authorization_code" https://accounts.google.com/o/oauth2/token

但我得到了不同的回应

{
  "error" : "invalid_client",
  "error_description" : "The OAuth client was not found."
}

为什么获取访问令牌这么困难?

更新

我不知道发生了什么,但我不再收到该错误,而且我获得了访问令牌但不是刷新令牌

我已查看过这篇文章Not receiving Google OAuth refresh token,并且我已撤销对我的应用的访问权限以重新生成刷新令牌,但使用此代码会显示有关无效代码的错误

1 个答案:

答案 0 :(得分:1)

我现在使用Curl解决了这个问题。似乎没有任何理由为什么上面的工作不能只是继续尝试,它最终在撤销对app的访问,authing应用程序,获取代码和使用Curl请求中的代码后工作。

这解决了我之前的问题YouTube API v3 keeps asking for authorisation every time