2012-02-02 85 views
0

我一直在为Facebook创建我的第一个应用程序,其中一个代码示例似乎没有工作。我已经得到了最新的PHP SDK: 下面Facebook的PHP SDK示例不工作

我这个代码的PHP和HTML代码:

<?php 
require("facebook-php-sdk/src/facebook.php"); 
$app_id = "257964450938655"; 
$auth_url = "http://www.facebook.com/dialog/oauth?client_id=" . $app_id . "&redirect_uri=" . urlencode("http://apps.facebook.com/orangepicker/") . "&scope=email"; 
$signed_request = $_REQUEST["signed_request"]; 
list($_encoded_sig, $_payload) = explode('.', $signed_request, 2); 
$_data = json_decode(base64_decode(strtr($_payload, '-_', '+/')), true); 
?> 

<!DOCTYPE html> 
<html lang="en" xmlns:fb="http://www.facebook.com/2008/fbml"> 
    <head> 
     <meta charset="utf-8" /> 
     <title>Orange Picker</title> 
    </head> 
    <body> 
     <?php if (empty($data["user_id"])): 
      echo("<script>top.location.href='" . $auth_url . "'</script>"); 
      echo("<div align=\"center\"><a href=\"" . $auth_url . "\" target=\"blank\">Authorize This Application</a></div>"); 
      echo($data["user_id"]);?> 
     <?php else: ?> 
     <noscript><div align="center">You need JavaScript enabled to use this app.</div></noscript> 
     <div align="center"><img src="Resources/tree.png" usemap="#treemap" /></div> 
     <map name="treemap"> 
      <area shape="circle" coords="22,29,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="37,26,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="55,22,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="75,14,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="93,16,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="112,13,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="128,12,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="146,17,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="166,26,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="182,33,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="194,42,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="208,57,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="222,70,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="234,88,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="236,110,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="223,123,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="208,134,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="193,146,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="177,155,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="161,165,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="144,171,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="125,171,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="106,166,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="84,162,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="70,158,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="55,151,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="42,136,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="29,123,10" onclick="OrangeClick()" alt="Orange" /> 
      <area shape="circle" coords="20,107,10" onclick="OrangeClick()" alt="Orange" /> 
     </map> 
     <div align="center" style="font-size:large;"><span id="waitTime"></span> <span id="TotalOranges"></span> <span id="TotalCarts"></span></div> 
     <script type="text/javascript"> 
      function OrangeClick() { 

      } 
     </script> 
     <div align="center">Copyright&#169; Neil Flodin <?php echo date("Y"); ?></div> 
     <?php endif; ?> 
    </body> 
</html> 

Facebook的示例代码(从here):

<?php 

    $app_id = "YOUR_APP_ID"; 

    $canvas_page = "YOUR_CANVAS_PAGE_URL"; 

    $auth_url = "http://www.facebook.com/dialog/oauth?client_id=" 
      . $app_id . "&redirect_uri=" . urlencode($canvas_page); 

    $signed_request = $_REQUEST["signed_request"]; 

    list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

    $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true); 

    if (empty($data["user_id"])) { 
      echo("<script> top.location.href='" . $auth_url . "'</script>"); 
    } else { 
      echo ("Welcome User: " . $data["user_id"]); 
    } 
?> 

我的代码只是不断当我运行它时刷新页面。任何有FB PHP SDK经验的人都知道为什么?

+0

总是小事......感谢您的帮助! – neilf 2012-02-03 00:32:43

回答

1

画布网址(redirect_uri)应指向您托管应用程序的位置,而不是指向Facebook网址。即与您在画布的Facebook开发人员设置中添加的网址相同!

而且也,此行:

$_data = json_decode(base64_decode(strtr($_payload, '-_', '+/')), true); 

应该是不带下划线:

$data = json_decode(base64_decode(strtr($_payload, '-_', '+/')), true); 

罪您稍后检查$data的内容,看是否用户进行身份验证。

1

问题是,在设置它时将变量定义为$_data,但在使用empty()进行检查时将其指定为$data。由于这会导致它始终返回true,因此您的代码将始终输出JavaScript重定向。

我猜你以前也认证过应用程序。这意味着一旦你被重定向到Facebook,你会立即重新回到(因为你已经登录)。因此,无限循环。

注:

  • 你不应该把下划线的$后,也可能与PHP的特殊变量的一个混淆 。
  • 你应该修改Facebook's PHP SDK文件。它
    似乎很多漂浮的例子都不是最新的
    版本的SDK。