我有一个功能齐全的 FQL 查询,但是当第二次触发它时,我收到错误代码 102:需要用户会话
在我的应用程序上,我有一个自动完成朋友搜索功能。
我正在使用 jquery ui 自动完成功能和使用 AJAX 的动态源。
这是我的 PHP 函数:
function fb_buscarAmigosAutocomplete($term='',$app_user=false){
$facebook = new Facebook(array(
'appId' => APP_ID,
'secret'=> APP_SECRET
));
$term=trim(strtolower($term));
//Buscar usuarios
try{
$fql = " SELECT uid,name,first_name,last_name,pic_square
FROM user
WHERE uid IN (
SELECT uid2
FROM friend
WHERE uid1=me()
)
AND strpos(lower(name),'".$term."') >=0
";
if($app_user)
$fql .= " AND is_app_user";
$fql .= " LIMIT 5";
$param = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
$result = $facebook->api($param);
} catch(FacebookApiException $e){
$error=$e->getMessage();
var_dump($e);
}
if(!empty($result)) {
$return['amigos']=$result;
$return['valido']=true;
}else
$return['valido']=false;
return $return;
}
奇怪的是,这在过去 2-3 周内运行良好,突然就停止了。甚至“奇怪”的是,它在第一次触发时仍然有效,但第二次就不行了。由于这是异步的,我不明白如果是第一次、第二次、第三次、第四次触发它有什么区别。
有任何想法吗?
Edit 1通过进一步的研究,我想我找到了解决方法。
这可能是因为报告了一个错误here正如所讨论的here
我的解决方法是捕获我通过 Facebook 对象获得的第一个 access_token,然后将其附加到该类的每个实例,如下所示
第一次连接:
$facebook = new Facebook(array(
'appId' => APP_ID,
'secret'=> APP_SECRET
));
$uid = $facebook->getUser();
if($uid){
$_SESSION['access_token']=$facebook->getAccessToken();
}
该 API 的任何其他用途:
$facebook = new Facebook(array(
'appId' => APP_ID,
'secret'=> APP_SECRET
));
$facebook->setAccessToken($_SESSION['access_token']);
try{
$user_info = $facebook->api('/'.$uid.'?fields=id,name,first_name,last_name,email,picture');
} catch(FacebookApiException $e){
$error = $e->getMessage();
}
至此已经解决了问题
Edit 2
它没有...有时我的访问令牌是一个有效的字母数字+100个字符的字符串,并且这些时候它可以工作。
有时它只是一个 48 个数字字符串,但它不是......我真的被困在这里了