Facebook访问令牌过期导致我的应用程序无法正常工作

时间:2012-12-20 23:09:46

标签: facebook-graph-api facebook-php-sdk

我开发了一款应用,用户可以将图片上传到网页相册。我不希望用户必须进行授权,因此我使用应用程序中的访问令牌为他们上传图像。如果管理员已登录并且访问令牌尚未过期,则此方法可以正常工作 - 它似乎只能持续几个小时。我查看了stackoverflow和facebook并尝试了许多不同的东西,似乎没有任何工作。以下是我正在使用的一些代码:

try {
        $facebook->setAccessToken("APP_ACCESS_TOKEN_FROM_GRAPH_API_TOOL");
        $token_url="https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=".$facebook->getAccessToken();
        $page_id = 'PAGE_ID';
        $response = file_get_contents($token_url);
        $params = null;
        parse_str($response, $params);
        $page_info['access_token'] = $params['access_token'];
        $page_info = $facebook->api("/".$page_id."?fields=access_token");
        if( !empty($page_info['access_token']) ) {
            $photo_details['access_token'] = $page_info['access_token'];
            $upload_photo = $facebook->api('/'.$page_id.'/photos', 'post', $photo_details);

我在做梦吗?这是可能的,我只是搞砸了代码?任何帮助都会非常感激,甚至只是为了指出我正确的方向......

1 个答案:

答案 0 :(得分:0)

目前,您的代码使用您自己的访问令牌,而不是App Access令牌。

要获取应用访问令牌,您需要按照https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=client_credentials

中的说明向https://developers.facebook.com/docs/technical-guides/opengraph/publishing-with-app-token/发出获取请求

在您的实现中,并假设APP_SECRET和APP_ID被定义为常量,您将通过以下方式获取应用程序访问令牌:

$appAccessToken = str_replace("access_token=","",$facebook->api("https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=client_credentials"));
$facebook->setAccessToken($appAccessToken);