我正在尝试将我的应用程序转换为最新版本的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。
感谢任何帮助。
答案 0 :(得分:9)
要解决的问题:
从重定向获得会话后,保存它。例如,使用会话变量。
有关获取响应数据的FacebookRequest方法,如getResponse和getRawResponse ..或GraphObject有 - > asArray()来获取后备数据。