扩展Facebook auth_token

时间:2013-03-05 22:24:39

标签: facebook

尝试扩展从Facebook JS SDK代码收到的auth_token时出现以下错误。

网址:https://graph.facebook.com/oauth/access_token?client_id=229083900472938&client_secret=XXXXXXXXX&grant_type=fb_exchange_token&fb_exchange_token=AAADQWcCC7moBAPM9OlZCpOYnZBoxWnX7MwpP86HHMQM2QAe1DkW9cAI3AaSxVXEPNo7NOnljYCawSg3pgLWtvRph9dhfgZBqK4vt4YB5ZAYCpaiJu71o

{    “错误”:{       “message”:“无法使用指定的access_token访问应用程序”,       “type”:“OAuthException”,       “代码”:1    } }

如果我更改URL以包含使用Graph API资源管理器生成的令牌,则可以正常工作。

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

我遇到了这个问题,并得到了FB工程师的直接支持。造成此错误的最可能原因是用户的“人口统计检查”。

我们的应用程序有一个年龄门,因为它与酒精有关。某些用户的个人资料没有包含足够的FB信息,以确保他们的位置超过了饮酒年龄,因此会话创建失败。为什么这只发生在这个电话上而不是之前的电话上,我不知道。

您的应用程序是否具有年龄门限或类似内容?

答案 1 :(得分:1)

我们在测试应用程序时遇到了这样的问题。 Facebook的测试用户在扩展访问令牌方面存在错误,但真正的用户没有。

问题是:我们受到国家限制,测试用户没有国家。

因此,请检查您的应用的限制。

答案 2 :(得分:0)

使用调试器调试令牌,并确保它与上面提供的APP ID匹配。

消息已清除,您使用的令牌不适用于access_token。

可能是您正在使用Graph API Explorer应用程序或其他应用程序混合令牌。

答案 3 :(得分:0)

使用以下代码生成代码;获得访问代码后,可以将其替换为扩展代码。代码的最后一部分显示了如何调试:

$app_id = "XXXXXXXXX";
$app_secret = "YYYYYYYYYYYY";
$redirect_url = "http://www.example.com/page.php";
$fb_code = $_REQUEST['code'];

if(!$fb_code)
{ 
    $login_dialog_url= "http://www.facebook.com/dialog/oauth?"
    . "client_id=" .  $app_id 
    . "&redirect_uri=" . urlencode( $redirect_url)
    .  "&scope=read_friendlists,read_stream,xmpp_login,user_online_presence,friends_online_presence,create_event,publish_stream&response_type=code";
    echo("<script>location.href='" . $login_dialog_url . "'</script>");
}
else
{
    $token_url="https://graph.facebook.com/oauth/access_token?"
    . "client_id=" . $app_id 
    . "&redirect_uri=". urlencode($redirect_url)
    . "&client_secret=" . $app_secret
    . "&code=" . $fb_code;
    $response = file_get_contents($token_url);
    parse_str($response, $params);
    $access_token = $params['access_token'];
    echo 'Access Token: '.$access_token.'<br>';

如果需要,请在此处生成扩展代码

    if($access_token) 
    {
        $token_url="https://graph.facebook.com/oauth/access_token?"
        . "client_id=" . $app_id 
        . "&redirect_uri=". urlencode($redirect_url)
        . "&client_secret=" . $app_secret
        . "&grant_type=fb_exchange_token"
        . "&fb_exchange_token=" . $access_token;
        $response = file_get_contents($token_url);
        parse_str($response, $params);
        $extended_access_token = $params['access_token'];
        echo 'Extended Access Token: '.$extended_access_token;
    }

在此处调试扩展代码:

    $expires = "https://graph.facebook.com/debug_token?input_token=$access_token&access_token=$extended_access_token";
    $response = file_get_contents($expires);
    echo "<pre>";
            print_r(json_decode($response));
    echo "</pre>";