使用PHP连接FourSquare API V2

时间:2011-05-28 05:15:40

标签: php api foursquare

我正在使用this guide来快速进行OAuth身份验证,因此我可以使用API​​。不幸的是,他的教程似乎不稳定在他的链接中找不到引用的EpiOAuth.php文件,我不得不进行谷歌搜索以查找副本。在第一次运行index.php以获取我的令牌时,我在index.php中的$ results = $ foursquareObj-> getAuthorizeUrl()行收到了“缺少参数”错误。即使手动放入我的回调网址,我的令牌也会以“h”返回:

Login Via Foursquare
string(1) "h" 

显然,这是不对的。我怎么做错了?

1 个答案:

答案 0 :(得分:10)

这不是您问题的直接答案,但对于获取OAuth令牌非常简单。我刚刚开始使用foursquare,这就是我所拥有的一切。它不进行任何类型的错误检查,但它确实获得了一个OAuth令牌,允许您查看API。

<强>本地主机/脚本/ secrets.php

<?php  
  // insert your foursquare API keys
  define('CLIENT_ID', 'YOUR_CLIENT_ID');
  define('CLIENT_SECRET', 'YOUR_CLIENT_SECRET');

<强>本地主机/脚本/ 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 ) ;

<强>本地主机/脚本/ 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>');

<强>本地主机/ 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>

我不擅长解释,所以我希望你能看到我在做什么,并且可以在必要的基础上建立。

(由于PHP处理本地文件系统,因此最好将您的secrets.php重新定位到Web服务器路径之外的位置。以防万一:)