我一直在努力找出这件事情。 我的脚本工作正常,突然一半停止了。
我正在访问api并且正在获取访问令牌。使用访问令牌,我可以很好地访问用户的公共信息。但是,当我尝试将信息发布到他们的FB帐户时,我收到此错误。
Fatal error: Uncaught OAuthException: An active access token must be used to query information about the current user.
知道这里发生了什么吗? 我也在我的网站上使用会话来跟踪内部用户ID。不确定我的会话是否可能导致问题。
这是我的上传脚本,我收到了错误。
require 'facebook/src/facebook.php';
// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
'appId' => '12345678',
'secret' => 'REMOVED',
'fileUpload' => true,
'cookie' => true,
));
$facebook->setFileUploadSupport(true);
$me = null;
// Session based API call.
if ($session) {
try {
$uid = $facebook->getUser();
$me = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
}
}
// login or logout url will be needed depending on current user state.
if ($me) {
$logoutUrl = $facebook->getLogoutUrl();
} else {
$loginUrl = $facebook->getLoginUrl();
}
$photo_details = array('message' => 'my place');
$file='photos/my.jpg'; //Example image file
$photo_details['image'] = '@' . realpath($file);
$upload_photo = $facebook->api('/me/photos', 'post', $photo_details);
答案 0 :(得分:30)
只需检查当前Facebook用户ID $user
,如果它返回null,则需要重新授权用户(或使用自定义$_SESSION
用户ID值 - 不推荐)
require 'facebook/src/facebook.php';
// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
'appId' => 'APP_ID',
'secret' => 'APP_SECRET',
));
$user = $facebook->getUser();
$photo_details = array('message' => 'my place');
$file='photos/my.jpg'; //Example image file
$photo_details['image'] = '@' . realpath($file);
if ($user) {
try {
// We have a valid FB session, so we can use 'me'
$upload_photo = $facebook->api('/me/photos', 'post', $photo_details);
} catch (FacebookApiException $e) {
error_log($e);
}
}
// login or logout url will be needed depending on current user state.
if ($user) {
$logoutUrl = $facebook->getLogoutUrl();
} else {
// redirect to Facebook login to get a fresh user access_token
$loginUrl = $facebook->getLoginUrl();
header('Location: ' . $loginUrl);
}
我写了一篇关于如何将图片上传到用户墙上的tutorial。
答案 1 :(得分:30)
$facebook->api('/'.$facebook_uid)
而不是
$facebook->api('/me')
它有效。
答案 2 :(得分:18)
所以我有同样的问题,但这是因为我保存了访问令牌但没有使用它。可能是因为我因为截止日期而非常困,或者我只是没想到它!但万一其他人处于同样的情况:
当我登录用户时,我保存了访问令牌:
$facebook = new Facebook(array(
'appId' => <insert the app id you get from facebook here>,
'secret' => <insert the app secret you get from facebook here>
));
$accessToken = $facebook->getAccessToken();
//save the access token for later
现在当我向facebook发出请求时,我只是做了这样的事情:
$facebook = new Facebook(array(
'appId' => <insert the app id you get from facebook here>,
'secret' => <insert the app secret you get from facebook here>
));
$facebook->setAccessToken($accessToken);
$facebook->api(... insert own code here ...)
答案 3 :(得分:4)
在一段时间后,您的访问令牌将过期。
为防止这种情况发生,您可以在身份验证期间请求'offline_access'权限,如下所示:Do Facebook Oauth 2.0 Access Tokens Expire?
答案 4 :(得分:0)
有同样的问题,解决方案是重新授权用户。 在这里查看:
<?php
require_once("src/facebook.php");
$config = array(
'appId' => '1424980371051918',
'secret' => '2ed5c1260daa4c44673ba6fbc348c67d',
'fileUpload' => false // optional
);
$facebook = new Facebook($config);
//Authorizing app:
?>
<a href="<?php echo $facebook->getLoginUrl(); ?>">Login con fb</a>
已保存的项目并在我的测试环境中打开并再次运行。就像我一样,你可以评论你以前的代码并尝试。
答案 5 :(得分:0)
我试图在没有身份验证的情况下获取用户信息时遇到了同样的问题。
在任何请求之前检查您是否有loggen。
$uid = $facebook->getUser();
if ($uid){
$me = $facebook->api('/me');
}
上面的代码可以解决您的问题。
答案 6 :(得分:0)
我遇到了同样的问题,但我可以通过清除浏览器(ctrl+shift+R)
中的Cookie和缓存来解决此问题。此外,您必须确保您的访问令牌处于活动状态。
希望这可以帮助您解决问题。