【问题标题】:Connecting with FourSquare API V2 using PHP使用 PHP 连接 FourSquare API V2
【发布时间】:2015-04-06 08:12:45
【问题描述】:

我正在使用this guide 来获得快速而肮脏的 OAuth 身份验证,以便我可以使用 API。不幸的是,他的教程似乎参差不齐。在他的链接中没有找到引用的 EpiOAuth.php 文件,我不得不进行谷歌搜索以找到副本。在第一次运行 index.php 以获取我的令牌时,我在 index.php 中的 $results = $foursquareObj->getAuthorizeUrl() 行收到“缺少参数”错误。即使通过手动放置我的回调 URL,我的令牌也会返回为“h”:

Login Via Foursquare
string(1) "h" 

这显然是不对的。我(他)怎么做错了?

【问题讨论】:

    标签: php api foursquare


    【解决方案1】:

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

    我不擅长解释,所以我希望你能看到我在做什么,并且可以根据需要在此基础上进行构建。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多