2011-06-16 121 views
1

这是我前一个问题的延伸。随着这个问题的解决,我仍然遇到错误。我正在关闭Javascript指南here。我现在处于页面的最后一个代码段,即底部。在我的页面的顶部,我有下面的代码(APP ID秘密ID在我的代码中定义):Further Facebook登录Javascript错误

<?php 

define('YOUR_APP_ID', '**APP ID**'); 
define('YOUR_APP_SECRET', '**SECRET ID**'); 

function get_facebook_cookie($app_id, $app_secret) { 
    $args = array(); 
    parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args); 
    ksort($args); 
    $payload = ''; 
    foreach ($args as $key => $value) { 
    if ($key != 'sig') { 
     $payload .= $key . '=' . $value; 
    } 
    } 
    if (md5($payload . $app_secret) != $args['sig']) { 
    return null; 
    } 
    return $args; 
} 

$cookie = get_facebook_cookie(YOUR_APP_ID, YOUR_APP_SECRET); 

$user = json_decode(file_get_contents(
    'https://graph.facebook.com/me?access_token=' . 
    $cookie['access_token'])); 

?> 

但现在我得到这些错误(谷歌搜索他们并没有拒绝任何事有用的):

同样,我的应用程序ID是正确显示在错误代码。

Notice: Undefined index: fbs_**MY APP ID** in C:\wamp\www\_header.php on line 10 
Notice: Undefined index: sig in C:\wamp\www\_header.php on line 18 

它可能是一个与WAMP相关的问题吗?提前致谢。

回答

1

检查您的支架。很多时候,括号分层结构之间的简单混淆可以解决这些令人讨厌的错误。

2

这意味着$ COOKIE [ 'FBS'。$ APP_ID]不存在,这意味着COOKIE VAR是空的(或不设置)

+0

@geneis我很清楚这一点。如果您阅读我的问题,我多次提到** APP ID **和** SECRET ID **被替换为我的代码中的实际ID。 – tnw 2011-06-16 15:18:20

+1

编辑我的回答 – genesis 2011-06-16 15:22:19

+0

Cookie var将如何为空?我在下面定义它:'$ cookie = get_facebook_cookie(YOUR_APP_ID,YOUR_APP_SECRET);'另外,我相当确定它在PHP中定义的位置并不重要,但它值得一试......我将定义在函数之上并且没有改变任何东西。 – tnw 2011-06-16 15:25:36

0

我已经添加了一个简单的检查来检查cookie中的var。 这适用于我。

function get_facebook_cookie($app_id, $application_secret) 
{ 
    $args = array(); 
    if (!isset($_COOKIE['fbs_' . $app_id])) { 
    //BOOHOO, NO COOKIE; 
    return $args; 
    } 

    parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args); 
    ksort($args); 
    $payload = ''; 
    foreach ($args as $key => $value) { 
    if ($key != 'sig') { 
     $payload .= $key . '=' . $value; 
    } 
    } 
    if (md5($payload . $application_secret) != $args['sig']) { 
    return null; 
    } 
    return $args; 
} 
0

为什么不使用Facebook PHP SDK?我做了它这个样子,这对我的作品虽然没有为应用程序秘密检查:

// Read the cookie created by the JS API 
$cookie = trim($_COOKIE['fbs_' . FB_APP_ID], '\\"'); 
parse_str($cookie, $data); 

// Startup the Facebook object 
$fb = new Facebook(array(
    'appId' => FB_APP_ID, 
    'secret' => FB_APP_SECRET 
)); 

// Say we are using the token from the JS 
$fb->setAccessToken($data['access_token']); 

// It should work now 
var_dump($fb->getUser()); 

注意$ COOKIE [“FBS”。在JavaScript上调用FB.login方法后,FB_APP_ID]变量才可用。

另外,还要确保你允许初始化JS API时,像这样从PHP读取cookie:

FB.init({ 
    appId : 'YOUR APP ID', 
    cookie : true 
}); 

希望它帮助。

链接到PHP SDK的github上:https://github.com/facebook/php-sdk/