Facebook Long Token:您必须提供或设置默认的应用程序密钥

时间:2014-08-18 16:59:55

标签: php facebook facebook-graph-api curl

我正在使用Facebook PHP SDK为新的长期令牌交换短期令牌。 正如here所述,您应该使用以下参数调用URL:

GET /oauth/access_token?
 client_id={app-id}
&client_secret={app-secret}
&grant_type=client_credentials

如果我直接在浏览器中调用它,它可以正常工作。我可以做一个卷曲电话,那没关系。但是我希望保持与官方FacebookSDK的关系,所以在我的课堂上我做了这个方法:

public function renewToken($userShortToken, $redirectURI = FALSE) {

    if ($redirectURI !== FALSE)
        $this->redirectURI = $redirectURI;

    $this->fbSession = new FacebookSession($userShortToken);
    $params = '/oauth/access_token?grant_type=fb_exchange_token' .
                '&client_id=' . $this->appId .
                '&client_secret=' . $this->appSecret . 
                '&fb_exchange_token=' . $userShortToken .
                '&appsecret_proof=' . hash_hmac('sha256', $userShortToken, $this->appSecret);
    # About appsecret_proof: https://developers.facebook.com/docs/graph-api/securing-requests
    $this->debug->log('params', $params);

    try {
        $request = new FacebookRequest($this->fbSession, 'GET', $params);
        $this->debug->log('request', $params);
        $response = $request->execute();
        $this->debug->log('response', $response);
        $object = $response->getGraphObject();
        return $object;

    } catch (FacebookRequestException $ex) {
        $this->debug->log('FacebookRequestException', $ex);
    } catch (\Exception $ex) {
        $this->debug->log('FacebookRequestException', $ex->getMessage());
    }

    return FALSE;
}

PS:在用户通过Facebook Javascritp SDK登录我的网站后,“$ userShortToken”通过Ajax发送到服务器。

所以我在控制台中看到这些错误(我使用FirePHP将消息输出到控制台):

  

/的OAuth / grant_type的access_token = fb_exchange_token&安培; CLIENT_ID = 305 ... 57&安培; client_secret = 759 ... 6C4&安培; fb_exchange_token = CAAEV ... LR&安培; appsecret_proof = 2E ... 76

     

您必须提供或设置默认的应用程序密钥。 FacebookRequestException / myserver /.../ socialshare / MyClass.php:96

我无法理解这条消息。我设置了app secret,短令牌,URL中的所有必要参数。甚至是“appsecret_proof”哈希。这一切都是正确的。如果我复制网址并调用图表,它就能正常工作,并让我回到长令牌。

有人知道如何坚持使用FacebookSDK,或者我应该放弃这个任务吗?我只想以最正确的方式做到这一点。

谢谢。

1 个答案:

答案 0 :(得分:0)

当我收到此错误时,它帮助我致电

FacebookSession::setDefaultApplication($fbAppId, $fbAppSecret);

在创建FacebookSession

之前