2012-11-23 135 views
5

嘿,我开始学习foursquare API,但我坚持要获得Access令牌。 以下是我在SO中找到的代码的一部分。如何使用curl获得JSON响应

 // build url 
    $url = 'https://foursquare.com/oauth2/access_token'; 
    $url .= '?client_id='.CLIENT_ID; 
    $url .= '&client_secret='.CLIENT_SECRET; 
    $url .= '&grant_type=authorization_code'; 
    $url .= '&redirect_uri=**********/callback'; //change to your 4sq callback 
    $url .= '&code='.$code; 

    // call to https://foursquare.com/oauth2/access_token with $code 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    $result = curl_exec($ch); 

但是,这没有奏效,所以我试图找到错误。首先回显$ url并手动点击该链接。它工作,foursquare已经返回给我一个JSON格式的访问令牌。所以问题在于代码的卷曲部分。

你能找到我的错误吗?更重要的是你可以建议我一些资源来研究卷曲吗?

编辑: 我做了的var_dump($结果),输出为“布尔值false”

回答

6

问题是http * 小号 *,尝试添加这些:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
+0

是啊!我在回答之前尝试了echo curl_error($ ch),输出结果是关于SSL验证的,我正在寻找它。答案比问题^^ – Hasan

+0

快,它的工作。谢谢 – Hasan

2

如果是POST请求,那么这是正确的方式做到这一点:

$body.='client_id='.CLIENT_ID etc. 
$c = curl_init(); 
curl_setopt($c, CURLOPT_URL, $url); 
curl_setopt ($c, CURLOPT_POST, true); 
curl_setopt ($c, CURLOPT_POSTFIELDS, $body); 
curl_setopt ($c, CURLOPT_RETURNTRANSFER, true); 
$page = curl_exec ($c); 
curl_close ($c); 
+0

“” 未定义的常量CURLOPT_GET用途 - 假设 'CURLOPT_GET' “” – Hasan

+0

是的,对不起,没在一段时间内不使用GET方法,请检查http://codular.com/curl-with-php – cezar

+0

您可能还需要将标头设置为json curl_setopt(CURLOPT_HTTPHEADER,'Content-type:application/json') ; – cezar