我想阅读当前用户的所有朋友的生日。我使用facebook的新Graph API。我根据Facebook insights example和php-sdk example请求授权(read_friendslist
和friends_birthday
)。为了阅读好友列表和用户详细信息,我使用了带有PHP PHP SDK的Graph API。
即将发布的代码片段是我的方法的一个简短的自包含正确的示例。如果我尝试使用我的应用程序,它会请求登录,然后请求权限,然后由于没有会话可用而无法打印我的所有朋友。这有什么不对?
首先是以下birthday.php
使用的index.php
,我删除了一些样板代码或代码,我认为它不会导致此问题(由[...]标识)。您可以在此问题的最后找到完整的代码。
<?php
function get_birthday_of_friends() {
$fbconfig['appid' ] = "MY_APP_ID";
$fbconfig['secret'] = "MY_APP_SECRET";
try{
include_once "facebook/src/facebook.php";
}
catch(Exception $o){
// [...] log error
}
// Create our Application instance.
$facebook = new Facebook(array(
'appId' => $fbconfig['appid'],
'secret' => $fbconfig['secret'],
'cookie' => true,
));
$session = $facebook->getSession();
$fbme = null;
// Session based graph API call.
if ($session) {
// [...] return birthdays
} else {
echo "No session found";
}
}
?>
所需的lib.php
与见解示例相同。
<?php
// [...] Include and define app-id etc.
function get_access_token($base_url) {
if (isset($_REQUEST['access_token'])) {
return $_REQUEST['access_token'];
}
$params = array();
$params['client_id'] = APP_ID;
$params['redirect_uri'] = $base_url;
if (!isset($_REQUEST['code'])) {
$params['scope'] = 'read_friendlists, friends_birthday';
$url = FacebookMethods::getGraphApiUrl('oauth/authorize', $params);
throw new RedirectionException($url);
} else {
$params['client_secret'] = APP_SECRET;
$params['code'] = $_REQUEST['code'];
$url = FacebookMethods::getGraphApiUrl('oauth/access_token');
$response = FacebookMethods::fetchUrl($url, $params);
$response = strstr($response, 'access_token=');
$result = substr($response, 13);
$pos = strpos($result, '&');
if ($pos !== false) {
$result = substr($result, 0, $pos);
}
return $result;
}
}
// [...] Call get_access_token() and get_birthday_of_friends()!
?>
你可以帮帮我吗?我在pastebin.com上添加了整个源代码,如果这有助于您识别我的问题。 pastebin.com上的源代码为“index.php”和“birthday.php”。
提前谢谢!
答案 0 :(得分:1)
我不确定您使用的方法是否已弃用,但我知道这是旧方法,您应该尝试使用新方法以获取身份验证令牌。
看一下这个链接: http://developers.facebook.com/docs/authentication/signed_request/
一目了然,你必须:
signed_request
参数。oauth_token
。 确保您的应用的配置设置已启用Oauth 2.0 for Canvas
(高级标签页)。
答案 1 :(得分:0)
我认为在某些浏览器中存在第三方Cookie的问题。你在Safari测试吗?此外,尝试向loginUrl添加权限 - 它比使用oauth添加和请求权限更简单。
答案 2 :(得分:0)
如果没有可用的会话,我必须重定向到登录页面并要求具有参数的扩展权限。这对我来说很有把握,感谢manuelpedrera帮助我。
$facebook->getLoginUrl(array('req_perms' => 'read_friendlists, [...]'));