0

我目前遇到 60 天 access_token 的问题。我通过 /me/applications 获取了粉丝网站 access_token,我想在上面发布,而不需要每 2 小时刷新一次网站。

当我以 facebook 提供的方式解析粉丝网站的令牌时,它只会引发错误。

登录是通过 Javascript 在后台使用 PHP SDK 处理的。

问候,莫里茨

编辑:

{"error_code":1,"error_msg":"An unknown error occurred"}是错误。

代码是这样的:

$attachment = array('message' => $post['title'],
                        'link' => $unique,
                        'actions' => '{"name": "Fanseiten Admin?", "link": "http://google.com"}',
                        'access_token' => $page['access_token']);
$result = $facebook->api('/'.$page['pageid'].'/feed', 'post', $attachment);

只需使用存储在数据库中的访问令牌推送到站点。

4

1 回答 1

3

我找到了解决方案:使用以下方法扩展 base_facebook.php 类并调用

$facebook->setAccessToken($facebook->getExtendedAccessToken());

应用程序的 access_token 现在也延长至 60 天。

public function getExtendedAccessToken(){

    try {
        // need to circumvent json_decode by calling _oauthRequest
        // directly, since response isn't JSON format.
        $access_token_response =
            $this->_oauthRequest(
                $this->getUrl('graph', '/oauth/access_token'), array(
                    'client_id' => $this->getAppId(),
                    'client_secret' => $this->getAppSecret(),
                    'grant_type'=>'fb_exchange_token',
                    'fb_exchange_token'=>$this->getAccessToken()
                )
            );
    } catch (FacebookApiException $e) {
        // most likely that user very recently revoked authorization.
        // In any event, we don't have an access token, so say so.
        return false;
    }

    if (empty($access_token_response)) {
        return false;
    }

    $response_params = array();
    parse_str($access_token_response, $response_params);
    if (!isset($response_params['access_token'])) {
        return false;
    }

    return $response_params['access_token'];
}
于 2012-04-23T20:18:18.863 回答