Facebook SDK V4

时间:2014-05-05 20:04:27

标签: php facebook facebook-php-sdk

我正在尝试将我的应用程序转换为最新版本的Facebook PHP SDK(V4)。我有三个问题:第一个问题是每次调用(使用我的代码)都需要经历getLoginUrl()函数。这对我来说似乎很奇怪,因为会话的重点是不必为每次调用生成新代码,对吗?其次,我试图找出如何访问数据 - 现在所有内容都包含在[" backingData":protected]节点中......当我尝试访问时...给我一个致命错误:

 Cannot access protected property Facebook\GraphObject::$backingData

最后,我假设我收到此错误,因为我还没有请求正确的权限。正如您将在我的代码中看到的那样,我正在使用之前的范围'数组语法作为getLoginUrl()函数中的参数...但它永远不会弹出并要求我接受权限。

这是我的代码:

require_once( 'fb2/FacebookSession.php' );
require_once( 'fb2/FacebookRedirectLoginHelper.php' );
require_once( 'fb2/FacebookRequest.php' );
require_once( 'fb2/FacebookResponse.php' );
require_once( 'fb2/FacebookSDKException.php' );
require_once( 'fb2/FacebookRequestException.php' );
require_once( 'fb2/FacebookAuthorizationException.php' );
require_once( 'fb2/GraphObject.php' );
require_once( 'fb2/FacebookOtherException.php' );

use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\FacebookOtherException;

session_start();

FacebookSession::setDefaultApplication('522464134491111', '<removed>');

$helper = new FacebookRedirectLoginHelper('https://mediaalias.com/fb_apps/graph_search_2.php/');

try {
    $session = $helper->getSessionFromRedirect();
} catch(FacebookRequestException $ex) {

} catch(\Exception $ex) {

}

if ( isset( $session ) && $session ) {
  // graph api request for user data
  $request = new FacebookRequest( $session, 'GET', '/breakthelimit/posts' );
  $response = $request->execute();
  // get response
  $posts = $response->getGraphObject();

  // print data
  echo "<pre>";
    var_dump($posts);
  echo "</pre>";
} else {
  // show login url
  echo '<a href="' . $helper->getLoginUrl(array('scope' => 'manage_pages, read_insights')) . '">Login</a>';
}

我正在尝试获取每个网页帖子的ID。以前,这非常简单。

以下是我在API中的回复:

object(Facebook\GraphObject)#289 (1) {
  ["backingData":protected]=>
  array(2) {
    ["data"]=>
    array(20) {
      [0]=>
      object(stdClass)#5 (18) {
        ["id"]=>
        string(31) "213418912041722_602369633146646"
        ["from"]=>
        object(stdClass)#6 (3) {
          ["category"]=>
          string(7) "Website"
          ["name"]=>
          string(20) "Favorite Exotic Car?"
          ["id"]=>
          string(15) "213418912041722"
        }

同样,对我来说,问题是,每次刷新脚本时,代码都必须在每次刷新脚本时生成一个新代码(令牌? - 它表示?code =)。而且,如何访问响应中的数据?

我试过转储:

$posts->backingData['data'] 

这是我得到致命错误的地方。直接去:

$posts->data

返回NULL。

感谢任何帮助。

1 个答案:

答案 0 :(得分:9)

要解决的问题:

从重定向获得会话后,保存它。例如,使用会话变量。

有关获取响应数据的FacebookRequest方法,如getResponse和getRawResponse ..或GraphObject有 - > asArray()来获取后备数据。