尝试扩展从Facebook JS SDK代码收到的auth_token时出现以下错误。
{ “错误”:{ “message”:“无法使用指定的access_token访问应用程序”, “type”:“OAuthException”, “代码”:1 } }
如果我更改URL以包含使用Graph API资源管理器生成的令牌,则可以正常工作。
有什么想法吗?
答案 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>";