ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php – Google OAuth2错误 – 缺少必需参数:刷新时为grant_type

2019-08-30 09:39:22  阅读:232  来源: 互联网

标签:php curl oauth-2-0 google-oauth google-calendar-api


我使用Google日历API构建了一个原型日历同步系统,除了刷新访问令牌外,它运行良好.这些是我经历的步骤:

1)授权我的API并收到授权码.

2)交换了访问令牌和RefreshToken的授权码.

3)使用Calendar API直到访问令牌过期.

此时,我尝试使用刷新令牌获取另一个访问令牌,因此我的用户不必继续授予访问权限,因为日记同步在脱机时发生.

这是PHP代码,我在整个系统中使用curl请求.

$requestURL = "https://accounts.google.com/o/oauth2/token";
$postData = array("grant_type" => "refresh_token", 
                  "client_id" => $clientID,    
                  "client_secret" => $clientSecret, 
                  "refresh_token" => $refreshToken);

$headers[0] = 'Content-Type: application/json';

$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_URL, $requestURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));

$response = curl_exec($ch);
$responseArray = json_decode($response, TRUE);

我得到的回应是:

[error] => invalid_request
[error_description] => Required parameter is missing: grant_type

没有报告卷曲错误.

我已尝试过标题内容类型:application / x-www-form-urlencoded,以及许多其他内容,结果相同.

我怀疑它在我的卷曲设置或标题中显而易见,因为此文档中提到的此请求中提到的每个参数都已设置.但是,我会绕圈子去,所以会感谢任何帮助,包括指出我忽略的任何明显错误.

解决方法:

您的请求不应发布JSON数据,而应查询表单编码数据,如:

$requestURL = "https://accounts.google.com/o/oauth2/token";
$postData = "grant_type=refresh_token&client_id=$clientID&client_secret=$clientSecret&refresh_token=$refreshToken";

$headers[0] = 'Content-Type: application/x-www-form-urlencoded';

$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_URL, $requestURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);

$response = curl_exec($ch);
$responseArray = json_decode($response, TRUE);

标签:php,curl,oauth-2-0,google-oauth,google-calendar-api
来源: https://codeday.me/bug/20190830/1767365.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有