2016-06-13 7 views
0

Im, используя код из ответа здесь:Foursquare апи возвращение нулевой access_token

Answer by BentFX

Я использую WAMP, и я сделал все, как он сделал. Проблема в том, что значение $ token пусто. Я бы не спросил, но он возвращает null, и я попробовал почти все. Вот код:

index.html

<!DOCTYPE HTML> 
<html> 
<head> 
<title>FourSquare test page...</title> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
<script type="text/javascript"> 
<!-- 
var foursquareKey; 

// Open foursquare login window. 
function get4sqKey(){ 
    if(!foursquareKey){ 
    window.open('scripts/4sq_Login.php', 'foursquareAuth', 'width=960, height=548'); 
    } 
} 

// called crosswindow by login window 
function set4sqKey(key){ 
    foursquareKey = key; 
    alert(foursquareKey); 
    //alert("Logged into Foursquare"); // setTimeout makes alert non-blocking 

} 

// simple alert to display OAuth token 
function showKey(){ 
    alert(foursquareKey); 
} 

// --> 
</script> 
</head> 
<body> 
<a href="javascript:get4sqKey();">get4sqKey();</a> | 
<a href="javascript:showKey();">showKey();</a> 
</body> 
</html> 

4sq_login.php в папку сценариев.

<?php 

    require_once('secrets.php'); //defines CLIENT_ID 

// build $url 
    $url = 'https://foursquare.com/oauth2/authenticate'; 
    $url .= '?client_id='.CLIENT_ID; 
    $url .= '&response_type=code'; 
    $url .= '&redirect_uri=http://localhost/scripts/4sq_Callback.php'; 

    header('Location: '.$url) ; 

    ?> 

4sq_Callback. Каталоги установлены, и ссылка на обратный вызов с четырьмя квадратами также верна.

<?php 
// Foursquare login step 2, echo back $code from QUERY_STRING 
    require_once('secrets.php'); // defines CLIENT_ID & CLIENT_SECRET 

// get $code from QUERY_STRING 
    parse_str($_SERVER['QUERY_STRING'], $query); 
    $code = $query['code']; 

// build url 
    $url2 = 'https://foursquare.com/oauth2/access_token'; 
    $url2 .= '?client_id='.CLIENT_ID; 
    $url2.= '&client_secret='.CLIENT_SECRET; 
    $url2 .= '&grant_type=authorization_code'; 
    $url2 .= '&redirect_uri=http://localhost/scripts/4sq_Callback.php'; //change to your 4sq callback 
    $url2 .= "&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, $url2); 
    $result = curl_exec($ch); 
    curl_close($ch); 

// $result value is json {access_token: ACCESS_TOKEN} 
    $values = json_decode($result, true); 
    $token = $values['access_token']; 

// set access_token cookie (if you wish) 

// crosswindow scripting to pass back $token 
    echo('<script type="text/javascript">'); 
    echo('opener.set4sqKey("'.$token.'");'); 
    echo('self.close();'); // close self 
    echo('</script>'); 
+0

Каков вывод 'var_dump ($ result)'? – kunruh

+0

Кроме того, строка '$ url2. =" & Code =. $ Code ";' выглядит немного подозрительной ... Если это не требование специального формата API, вы имели в виду '$ url2. =" & Code = ". $ code; ' – kunruh

+0

var_dump дает boolean false –

ответ

0

Я понял. Проблема заключалась в том, что метод cURL работал неправильно. Я просто использовал эту строку, чтобы получить токен доступа. Я не знаю, почему cURL не работает, но этот метод является рабочим заместителем:

$values= file_get_contents($url2);