php - 谷歌 API OAuth 2.0 CURL 返回 "Required parameter is missing: grant_type"

标签 php curl oauth google-api

我正在尝试为 Web 服务器应用程序实现 Google 的 OAuth 2.0 身份验证。

我可以从 Google 获取代码,但是当我发回此代码以尝试获取访问 token 时,它总是给我错误“缺少必需的参数:grant_type。错误 400”,即使 grant_type 存在。

此外,如果我将内容长度指定为 0 以外的任何值,它会引发其他错误。

这是执行此 curl 帖子的代码:

$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, array( 
    'code='. urlencode($code),
    'client_id=' . urlencode($clientID),
    'client_secret=' . urlencode($clientSecret),
    'redirect_uri=http%3A%2F%2Flocalhost%2Fexperiments%2FnewGALogin.php',
    'grant_type=authorization_code'
)); 

最佳答案

尝试

curl_setopt($ch, CURLOPT_POSTFIELDS, array( 
    'code' => $code,
    'client_id' => $clientID,
    'client_secret' => $clientSecret,
    'redirect_uri' => 'http%3A%2F%2Flocalhost%2Fexperiments%2FnewGALogin.php',
    'grant_type' => 'authorization_code'
)); 

curl_setopt($ch, CURLOPT_POSTFIELDS,
    'code=' . urlencode($code) . '&' .
    'client_id=' . urlencode($clientID) . '&' .
    'client_secret=' . urlencode($clientSecret) . '&' .
    'redirect_uri=http%3A%2F%2Flocalhost%2Fexperiments%2FnewGALogin.php' . '&' .
    'grant_type=authorization_code'
); 

关于php - 谷歌 API OAuth 2.0 CURL 返回 "Required parameter is missing: grant_type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8198072/

相关文章:

php - 将 Azure 表存储实体转换为 JSON

php - 为什么我不能在 PHP 中比较这些数字?

php - 将图像和描述加载到叠加层中 (HTML/CSS/PHP)

php - 将 php 中的数据发送到 SQL、数据库时遇到问题

PHP/ curl : delete cookie created with CURLOPT_COOKIEJAR

php - 从 curl POST 响应解析 XML

java - OAuth 401 未经授权

oauth - 使用 OAuth 保护我的 REST API,同时仍然允许通过第三方 OAuth 提供商进行身份验证(使用 DotNetOpenAuth)

c++ - 从 libcurl 为 HTTP POST 计算 Content-MD5

ios - 无效签名 : oauth_signature