【问题标题】:Facebook php sdk setExtendedAccessTokenFacebook php sdk setExtendedAccessToken
【发布时间】:2013-05-23 11:14:44
【问题描述】:
$facebook = new Facebook(array(
    'appId'  => 'APP_ID',
    'secret' => 'APP_SECRET'
));

$facebook_uid = $facebook->getUser(); 
if (!empty($facebook_uid)) {
    try {
            $facebook_uid = $facebook->getUser();
            $facebook->setExtendedAccessToken();
            echo $accessToken = $facebook->getAccessToken(); die;
        } catch (Exception $e) {
    echo $e;
    die;
}

在执行此代码时对用户进行身份验证后,它提供了扩展访问令牌,但是当我刷新它时,它提供了应用程序令牌。

我试图找出问题并在setExtendedAccessToken()函数中得到了这个

$this->destroySession();

$this->setPersistentData(
'access_token', $response_params['access_token']
);

【问题讨论】:

  • 为什么要使用 $this->destroySession(); ?
  • 不,当我尝试在刷新时从会话中检索它时,它说Undefined index: fb_443344449090072_access_token

标签: php facebook facebook-php-sdk


【解决方案1】:

要获得长寿令牌 (https://developers.facebook.com/docs/facebook-login/access-tokens/#extending):

    <?php
    require 'src/facebook.php';  //<--Get it here: https://developers.facebook.com/docs/php/gettingstarted/
    $appID = "YOUR APP ID";
    $appSECRET = "YOUR APP SECRET";
    $facebook = new Facebook(array(
      'appId'  => $appID,
      'secret' => $appSECRET,
      'fileUpload' => false, // optional
      'allowSignedRequest' => false // optional but should be set to false for non-canvas apps
    ));

    $user_id = $facebook->getUser();
    $login_url = $facebook->getLoginUrl();

    ?>

    <html>
    <head></head>
    <body>

    <?php
      if ($user_id){
        $token = $facebook->getAccessToken();
        $path = "https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id=".$appID."&client_secret=".$appSECRET."&fb_exchange_token=".$token;
        //$ret = $facebook->api($path, $method, $params);
        $ch = curl_init();
        // Set some options - we are passing in a useragent too here
        curl_setopt_array($ch, array(CURLOPT_URL => $path));
        // Makes curl_exec() return server response
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        // Send the request & save response to $resp
        $resp = curl_exec($ch); 
        // Close request to clear up some resources
        curl_close($ch);
        echo '<div>Long-lived (2 month) '.$resp.'</div>';
        echo 'To debug it, copy to clipboard and click <a href="https://developers.facebook.com/tools/debug/accesstoken/">here.</a>';
      } else{
        echo 'Please <a href="'.$login_url.'">login to get a long-lived access token for facebook api.</a>';
      }

    ?>

    </body>
    </html>

【讨论】:

    【解决方案2】:

    将 LongLivedAccessToken 保存到您的数据库或会话中,并在您想要提取 facebook 数据时使用它

    我使用的代码是:

    $session = new FacebookSession($session->getToken());
    $longLivedAccessToken = $session->getLongLivedSession($facebook_app_id, $facebook_api_secret);
    $longLivedAccessToken=$session->getToken();
    //Store longLivedAccessToken in database
    

    我正在使用 Use facebook-php-sdk-v4-4.0-dev 并且他们在 docs 文件夹中也有文档。 FacebookRedirectLoginHelper.fbmd 可能会对您有所帮助...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-25
      • 1970-01-01
      • 2011-07-23
      • 2011-05-31
      • 2013-07-29
      • 2012-01-27
      • 1970-01-01
      相关资源
      最近更新 更多