问题
I'm using this guide to get a quick and dirty OAuth authentication so I can play around with the API. Unfortunately his tutorial seems spotty. The EpiOAuth.php file referenced wasn't found in his link and I had to do a google search to find a copy. Upon running index.php for the first time to get my token I received a 'missing parameter' error on the $results = $foursquareObj->getAuthorizeUrl() line in index.php. Even by manually placing my callback URL in, my token comes back as "h":
Login Via Foursquare
string(1) "h"
Which, obviously, isn't right. How am I (he) doing this wrong?
回答1:
This isn't a direct answer to your question, but is pretty straight forward for getting an OAuth token. I'm just getting started with foursquare, and this is about all I've got. It does not do any kind of error checking, but it does get an OAuth token which allows you to poke at the API.
localhost/scripts/secrets.php
<?php
// insert your foursquare API keys
define('CLIENT_ID', 'YOUR_CLIENT_ID');
define('CLIENT_SECRET', 'YOUR_CLIENT_SECRET');
localhost/scripts/4sq_Login.php
<?php
// Foursquare login stage 1, build url and redirect
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'; // change to your 4sq callback
// redirect
header( 'Location: '.$url ) ;
localhost/scripts/4sq_Callback.php
<?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
$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=http://localhost/scripts/4sq_Callback.php'; //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);
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)
$expire = time()+2592000; // 30 days from now
setcookie("foursquare_token", $token, $expire, '/');
// crosswindow scripting to pass back $token
echo('<script type="text/javascript">');
echo('opener.set4sqKey("'.$token.'");');
echo('self.close();'); // close self
echo('</script>');
localhost/index.htm
<!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;
setTimeout('alert("Logged into Foursquare");', 1); // 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>
I'm not good at explaining, so I hope you can see what I'm doing, and can build on it as necessary.
(Since PHP deals with the local file system it is actually preferable to relocate your secrets.php to a location outside of the web server path. Just in case :)
来源:https://stackoverflow.com/questions/6159809/connecting-with-foursquare-api-v2-using-php