我一直疯狂地试图为我的用户获取访问令牌。我在许多网站上阅读,以某种方式通过使用getSession()并从中获取access_token ...它给了我未定义的函数错误..我也搜索了所有解决方案说使用更新的SDK,但我的更新,它仍然将无法工作...所以我终于得到另一个获得访问令牌的解决方案,但这似乎是为所有用户提供相同的访问令牌...任何想法问题在哪里?所有用户肯定不能拥有相同的令牌吗?
$app_id = $facebook->getAppId();
$app_secret = $facebook->getApiSecret();
function callFb($url, $params)
{
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => $url,
CURLOPT_POSTFIELDS => http_build_query($params),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_VERBOSE => true
));
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
$params=array('client_id'=>$app_id, 'type'=>'client_cred', 'client_secret'=>$app_secret);
$url = "https://graph.facebook.com/oauth/access_token";
$access_token = callFb($url, $params);
$access_token = substr($access_token, strpos($access_token, "=")+1, strlen($access_token));
答案 0 :(得分:3)
问题在于您要求type=client_cred
,它告诉Facebook您不想要用户的访问令牌,而是该应用的访问令牌。这用于访问洞察,实时更新API和公共数据等操作。如果要获取用户数据,则不应传递该标志。
如果你确实想要推出自己对Graph API的访问权限,那么你可以按照https://developers.facebook.com/docs/authentication/上的说明进行操作。
答案 1 :(得分:0)
你说你正在使用PHP SDK,但我没有在你的代码中看到任何提及它。
正确的方法是:
<?php
require('facebook.php');
$fb = new Facebook(array('appId' => APP_ID, 'secret' => SECRET));
$user = $fb->getUser();
// if we have a valid user, we're logged in
if ($user)
{
// do stuff with the API using the $fb object
}
else
{
// redirect the user to the authentication page
header("Location: ".$fb->getLoginUrl());
}
示例主要从Facebook's SDK Github转述。