2012-05-11 36 views
0

我有一个Facebook应用程序,它发布了一些预加载的图像。我改变了代码结构,所以我把所有的变量都移到了config.php中,所以它会更舒适。但之后,该应用程序无法正常工作,我真的不知道为什么......在权限对话框后,它一遍又一遍地实现自己...有人能够发现错误吗?Facebook应用程序在授权后重新加载

这是在index.php:

<?php 

require 'facebook.php'; 
require 'config.php'; 

$facebook = new Facebook(array(
'appId' => $appId, 
'secret' => $appSecret, 
'baseUrl' => $baseUrl, 
'appBaseUrl' => $appBaseUrl, 
'fileUpload' => 'true', 
'cookie' => 'true' 
)); 

if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) { 
    $baseUrl = str_replace('http','https',$baseUrl); 
    $fbPageURL = str_replace('http','https',$fbPageURL); 
    $fbPageAppURL = str_replace('http','https',$fbPageAppURL); 
}else{ 
    // not https 
} 

    $signed_request = $facebook->getSignedRequest(); 
    $page_id = $signed_request["page"]["id"]; 
    $like_status = $signed_request["page"]["liked"]; 

     if(!$like_status){ 
      header("Location: notfan.php"); 
      exit; 
     } 

$user = $facebook->getUser(); 

$params = array(
    scope => 'publish_stream,user_photos', 
    redirect_uri => $fbPageAppURL 
    ); 

$loginUrl = $facebook->getLoginUrl($params); 
$app_data = $signed_request["app_data"]; 

?> 
        <!doctype html> 
        <html xmlns:fb="http://www.facebook.com/2008/fbml"> 
        <head> 
        <title><?php echo $appName; ?></title> 
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
        <style> 
         a:link {color:#f1effc;} 
         a:visited {color:#f1effc;} 
         a:hover {color:#19378d;} 
         a:active {color:#19378d;} 
         a:link {text-decoration: none} 
        </style> 
        </head> 
        <body> 
        <script type="text/javascript"> 
         function NotInFacebookFrame() { 
          return top === self; 
         } 
         function ReferrerIsFacebookApp() { 
          if(document.referrer) { 
           return document.referrer.indexOf("apps.facebook.com") != -1; 
         } 
         return false; 
         } 
         if (NotInFacebookFrame() || ReferrerIsFacebookApp()) { 
          top.location.replace("<?= $fbPageAppURL ?>"); 
         } 
        </script> 

<?php if($user){ 

     try { 
       $user_profile = $facebook->api('/me'); 

       $scope = 'publish_stream,user_photos'; 
       $scope_params = explode(',',$scope); 

       $permissions = $facebook->api("/me/permissions"); 

        if(array_key_exists('publish_stream', $permissions['data'][0]) && array_key_exists('user_photos', $permissions['data'][0])) { 

        // the main app logic here 

        } else { 
         $user = null; 
        } 


    } catch (FacebookApiException $e) { 
      error_log($e); 
      $user = null; 
     } 
    } 

    if ($user) { 
    // logged in user 
    } else { 
     // not logged in or not authenticated 
     echo '<script type="text/javascript">top.location.href = "'.$loginUrl .'";</script>'; 
    } 

?> 
</body> 
</html> 

和config.php文件:

<?php 
$appName = 'the name'; 
$appId = '123456789'; 
$appSecret = '1324v3434v34v'; 
$baseUrl = 'http://www.domain.com/app-name/'; 
$appBaseUrl = 'http://apps.facebook.com/zzzzzzz/'; 
$fbPageURL = 'http://www.facebook.com/xxxxxxx'; 
$fbPageAppURL = $fbPageURL.'?sk=app_'.$appId; 
?> 

非常感谢您!

回答

1

事实证明,这是一个服务器配置故障。

0

Wrap $ user = $ facebook-> getUser();在try/catch中并回应被捕获的异常。这会告诉你为什么用户没有登录。


更多细节 - 在下面的评论之后。

您在Javascript中检查文档引用者 - 但我的测试中的实际引用者是“http://static.ak.facebook.com/platform/page_proxy.php?v=4”,所以这会失败。这将导致一个循环。

要检查,如果你在一个画布的时候,刚开始使用PHP SDK

$facebook->signed_request(); 

的signed_request如果这是空的,那么你是不是在画布(或页选项卡),所以重定向到画布。用PHP做而不用Javascript。

+0

我试过这个:try {$ user = $ facebook-> getUser(); } catch(FacebookApiException $ e){echo $ e; }但不显示错误(空白页)并重新加载自己...:S – VORiAND

+0

什么是URL?我可以尝试连接并监控Facebook电话以提供更多线索。 – Robbie

相关问题