【问题标题】:Facebook PHP SDK access token issueFacebook PHP SDK 访问令牌问题
【发布时间】:2015-09-01 08:21:15
【问题描述】:

我在让 Facebook Graph API 使用令牌和没有重定向时遇到了一些问题。我通过 URL 获取令牌,但 facebook 无法识别它。代码如下:

$fb = new Facebook\Facebook([
    'app_id' => $details['app_id'],
    'app_secret' => $details['app_secret'],
    'default_graph_version' => $details['default_graph_version']
]);

$authToken = $this->helper->fetchUrl("https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id={$details['app_id']}&client_secret={$details['app_secret']}");

$fb->setDefaultAccessToken($authToken);

$response = $fb->get($page.'/posts');

我得到的错误是 FacebookResponseException:OAuth 访问令牌签名无效
在这一点上,我确定这不是正确的方法,但我找不到任何关于正确方法的文档。

【问题讨论】:

    标签: php facebook facebook-graph-api


    【解决方案1】:

    原来我试图使用返回的完整字符串设置默认令牌,即 access_token=ACTUAL_TOKEN

    $fb->setDefaultAccessToken($authToken); 更改为

    $info = explode('=', $authToken);
    $fb->setDefaultAccessToken($info[1]);
    

    解决了问题。

    编辑:
    更好的是,事实证明您不需要为这样的应用请求请求令牌,因此这也可以:

    $fb = new Facebook\Facebook([
        'app_id' => $details['app_id'],
        'app_secret' => $details['app_secret'],
        'default_graph_version' => $details['default_graph_version'],
        'default_access_token' => $details['app_id'].'|'.$details['app_secret']
    ]);
    
    $response = $fb->get($page.'/posts');
    

    【讨论】:

      【解决方案2】:

      对于 facebook api v4 试试这个

      我认为这个 refo https://github.com/codeNmind/facebook-php-sdk-v4 可以帮助你

      use Facebook\HttpClients\FacebookHttpable;
      use Facebook\HttpClients\FacebookCurl;
      use Facebook\HttpClients\FacebookCurlHttpClient;
      use Facebook\Entities\AccessToken;
      use Facebook\Entities\SignedRequest;
      use Facebook\FacebookSession;
      use Facebook\FacebookSignedRequestFromInputHelper;
      use Facebook\FacebookCanvasLoginHelper;
      use Facebook\FacebookRedirectLoginHelper;
      use Facebook\FacebookRequest;
      use Facebook\FacebookResponse;
      use Facebook\FacebookSDKException;
      use Facebook\FacebookRequestException;
      use Facebook\FacebookOtherException;
      use Facebook\FacebookAuthorizationException;
      use Facebook\GraphObject;
      use Facebook\GraphUser;
      use Facebook\GraphSessionInfo;
      
      FacebookSession::setDefaultApplication('APP-ID','APP-SECRET-KEY');
      
      $helper = new FacebookCanvasLoginHelper();
      
      try {
          $session = $helper->getSession();
      } catch (FacebookRequestException $ex) {
          echo $ex->getMessage();
      } catch (\Exception $ex) {
          echo $ex->getMessage();
      }
      
      if ($session) {
          try {
              $request = new FacebookRequest($session, 'GET', '/me');
              $response = $request->execute();
              $me = $response->getGraphObject();
              echo $me->getProperty('name');
          } catch(FacebookRequestException $e) {
              echo $e->getMessage();
          }
      } else {
          $helper = new FacebookRedirectLoginHelper('https://apps.facebook.com/APP_NAMESPACE/'); // add your Facebook app namespace here
      
          // getting the login url for your app
          $auth_url = $helper->getLoginUrl(array('email')); // add new permission here as an index type array
      
          // redirecting the user directly to your Facebook canvas app you can also make a link of it
          echo "<script>window.top.location.href='".$auth_url."'</script>";
      }
      

      【讨论】:

        猜你喜欢
        • 2012-08-29
        • 1970-01-01
        • 2018-09-08
        • 2013-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-07
        • 1970-01-01
        相关资源
        最近更新 更多