如何解决';必须使用应用程序access_token';错误


How to solve 'This method must be called with an app access_token' error?

我正在我的测试应用程序上测试分数api。

所以。。。我已使用以下权限注册了我的应用程序。

publish_stream,
publish_actions,
user_status,
user_photos

登录后,我在PHP 中请求以下api

$loggedUser = $Facebook->getUser();
$scoreUpdate = $Facebook->api('/'.$loggedUser."/scores", 'post', array('score'=> 100));

我得到以下错误。

必须使用应用程序access_token 调用此方法

所以我检查了sdk发送到脸书的内容,并确认它正在发送"access_token"和我的参数。

这种情况下有什么问题?

app access_token您可以简单地将其设置为:

$facebook->api('/me/scores', 'POST', array( 'score' => 100, 'access_token' => $facebook->getAppId().'|'.$facebook->getApiSecret() ));

voila

现在有两个令牌,一个User令牌。。。以及应用令牌。你需要晚一点。

现在,如果PHP-SDK找到一个用户access_token,它将附加该用户,我认为这是您的情况。我建议你阅读官方的Facebook如何发布分数

示例取自我的教程:

$APPLICATION_ID = "APP_ID";
$APPLICATION_SECRET = "APP_SECRET";
$token_url =    "https://graph.facebook.com/oauth/access_token?" .
                "client_id=" . $APPLICATION_ID .
                "&client_secret=" . $APPLICATION_SECRET .
                "&grant_type=client_credentials";
$app_token = file_get_contents($token_url);
$ret_obj = $fb->api( '/' . $fb->getUser() . '/scores', 'POST', array(
    'score' =>  100,
    'access_token' => $fb->getAppId().'|'.$fb->getApiSecret()
));

如果你在access_token参数中指定了应用程序访问令牌,你最终将失去使用/me的能力,因此你必须具体说明用户ID。否则你会收到以下错误:"OAuthException:必须使用活动访问令牌来查询有关当前用户的信息",如下所述:facebookUnaughtOAuthException:必须使用活动访问令牌来查询有关当前用户的信息