curl php无法从谷歌获取访问令牌。卷曲什么都不返回

时间:2013-04-30 17:23:33

标签: php curl oauth-2.0 google-oauth

UPDATE 如果我执行curl_error(),则返回 libcurl中不支持或禁用协议https

如果我通过命令行发送curl请求,我会获得一个访问令牌:

curl --data“code = removed& client_id = removed& client_secret = removed& redirect_uri = https://group.cs.cf.ac.uk/group3/oAuth2redirect.php&scope=https://www.googleapis.com/auth/calendar&grant_type=authorization_codehttps://accounts.google.com/o/oauth2/token

然而,当我尝试通过php curl执行此操作时,只返回任何内容

$code = $_GET['code'];
$client_id = "removed";
$client_secret = "removed";
$redirectUri = "https://group.cs.cf.ac.uk/group3/oAuth2redirect.php";
$scope = "https://www.googleapis.com/auth/calendar";
$grant_type = "authorization_code";
$url = "https://accounts.google.com/o/oauth2/token/";

$params = array(
            'code' => $code,
            'client_id' => $client_id,
            'client_secret' => $client_secret,
            'redirect_uri' => $redirectUri,
            'scope' => $scope,
            'grant_type' => $grant_type
         );


$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
$response = curl_exec($ch);
curl_close($ch);

print_r($response);

有谁知道为什么这是happerning,我认为它可能与标题有关但是我真的无法解决这个问题。

任何帮助都会很棒

编辑 使用Google的oauth2库不是一个选项

2 个答案:

答案 0 :(得分:3)

我现在已经解决了这个问题。事实证明curl没有设置为能够执行ssl请求(就像curl_error()返回libcurl中不支持或禁用协议https一样明显。

答案 1 :(得分:2)

我认为ssl会产生问题。谷歌是https,所以它也需要set_opt(“CURLOPT_SSL_VERIFYPEER”,val),更多细节访问,http://www.php.net/manual/en/function.curl-setopt-array.php除了其他东西,这可能是个问题。