这让我发疯>=(
$facebook->getUser() 有时效果很好,但有时返回 0
这是我的代码:
require 'fbapi/facebook.php';
$facebook = new Facebook(array(
'appId' => 'xxx',
'secret' => 'xxxxx',
));
$user = $facebook->getUser();
appId和secret是正确的。
这可能是 getUser 有时返回 0 的原因???
这让我发疯>=(
$facebook->getUser() 有时效果很好,但有时返回 0
这是我的代码:
require 'fbapi/facebook.php';
$facebook = new Facebook(array(
'appId' => 'xxx',
'secret' => 'xxxxx',
));
$user = $facebook->getUser();
appId和secret是正确的。
这可能是 getUser 有时返回 0 的原因???
我遇到了类似的问题。$facebook->getUser() 返回 0,有时它在用户未实际登录时返回有效的用户 ID,当我尝试进行图形 api 调用时导致致命的 Oauth 错误。我终于解决了这个问题。我不知道这是否是正确的方法,但它有效。这是代码:
<?php
include 'includes/php/facebook.php';
$app_id = "APP_ID";
$app_secret = "SECRET_KEY";
$facebook = new Facebook(array(
'appId' => $app_id,
'secret' => $app_secret,
'cookie' => true
));
$user = $facebook->getUser();
if ($user <> '0' && $user <> '') { /*if valid user id i.e. neither 0 nor blank nor null*/
try {
// Proceed knowing you have a logged in user who's authenticated.
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) { /*sometimes it shows user id even if user in not logged in and it results in Oauth exception. In this case we will set it back to 0.*/
error_log($e);
$user = '0';
}
}
if ($user <> '0' && $user <> '') { /*So now we will have a valid user id with a valid oauth access token and so the code will work fine.*/
echo "UserId : " . $user;
$params = array( 'next' => 'http://www.quickbite.co.in' );
echo "<p><a href='". $facebook->getLogoutUrl($params) . "'>Logout</a>";
$user_profile = $facebook->api('/me');
echo "<p>Name : " . $user_profile['name'];
echo "<p>";
print_r($user_profile);
} else {/*If user id isn't present just redirect it to login url*/
header("Location:{$facebook->getLoginUrl(array('req_perms' => 'email,offline_access'))}");
}
?>
您只需输入 php 标头即可
header('P3P: CP="NOI ADM DEV COM NAV OUR STP"');
这很可能是 Facebook 端的事情(开发人员在不久前已经经历过这个)。如果$user
返回 null 或 0,只需将它们重新路由到登录 url(你应该有)。它再次返回 0 的可能性很小(除非它们的末端有错误,或者您的代码比您发布的更多)。
我找到了一个解决这个问题的简单方法。当 facebook 类无法在您的服务器上设置或添加会话变量时,就会发生这种情况。
在我的代码中,我在包含 facebook 类之前使用了 session_write_close(),因此我得到了这个错误。“CSRF 状态令牌与提供的不匹配。”..
然后我在代码末尾移动了 session_write_close() ,最后它工作了.. :)
所以我一直在努力解决同样的问题,getUser()
总是返回 0。根本没有任何意义。NginX 错误日志显示以下错误“CSRF 状态令牌与提供的令牌不匹配”。然后我开始调试 sdk 并将其范围缩小到getAccessTokenFromCode()
无法从 Facebook 服务器获取正确的访问令牌,这与 SSL 证书有关。
下面提到的链接中的解决方案为我解决了这个问题。
https://github.com/facebook/php-sdk/issues/272
此外,您可能需要将与 sdk 捆绑在一起的“fb_ca_chain_bundle.crt”文件复制到您的 facebook 类文件所在的文件夹中。我做到了。
我希望这是有道理的。