过去几天我一直在尝试使用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,并且我已撤销对我的应用的访问权限以重新生成刷新令牌,但使用此代码会显示有关无效代码的错误
答案 0 :(得分:1)
我现在使用Curl解决了这个问题。似乎没有任何理由为什么上面的工作不能只是继续尝试,它最终在撤销对app的访问,authing应用程序,获取代码和使用Curl请求中的代码后工作。
这解决了我之前的问题YouTube API v3 keeps asking for authorisation every time