【问题标题】:Facebook SDK v5 Post as Page on WallFacebook SDK v5 发布为墙上的页面
【发布时间】:2015-09-01 09:59:50
【问题描述】:

我有下面的 sn-p,它可以作为我在 Facebook 上的用户帐户发布到 Facebook 页面。

FACEBOOK_* 在代码库的前面定义。

// SDK Version 5.0
$fb = new Facebook\Facebook([
    'app_id' => FACEBOOK_APP_ID,
    'app_secret' => FACEBOOK_APP_SECRET,
    'default_graph_version' => 'v2.4',
]);

// Returns a `Facebook\FacebookResponse` object
$response = $fb->post('/'.FACEBOOK_PAGE_ID.'/feed', $postData, FACEBOOK_ACCESS_TOKEN);

$postId = $response->getGraphNode();

现在我的问题是如何将其作为实际页面发布,而不是作为页面管理员的我的帐户发布。

我查看了 SDK 文档并且一直在转圈,有很多 v4 的示例,但由于它已被弃用,我正在尝试使用 v5,但似乎无法弄清楚,我发现的任何发布归属或冒名顶替的链接都是 SDK v5 中的死链接。

据我所知,我需要调用 /{user-id}/accounts 以从我的用户 https://developers.facebook.com/docs/facebook-login/access-tokens#pagetokens 获取页面的访问令牌

但要获得{user-id},我必须使用 SDK 文档中的以下示例查询用户:

// Make sure to load the Facebook SDK for PHP via composer or manually
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;

if($session) {
try {
    $user_profile = (new FacebookRequest(
        $session, 'GET', '/me'
    ))->execute()->getGraphObject(GraphUser::className());
    echo "Name: " . $user_profile->getName();
} catch(FacebookRequestException $e) {
    echo "Exception occured, code: " . $e->getCode();
    echo " with message: " . $e->getMessage();
} 

这里的问题是我不知道如何获取我需要获取用户数据的会话,该用户数据为我提供访问令牌以允许我将访问令牌传递到上面的代码 sn-p 中,这就是如果我理解正确!?

非常感谢任何帮助!

【问题讨论】:

  • 你找到解决这个问题的方法了吗?我在使用这个新 SDK 时遇到了很多错误。 Posted another question here
  • @Zl3n,不,抱歉,我还不能让它工作,还在努力解决,如果我解决了,我会在这里发帖。
  • 非常感谢,您让我有一个我没有想到的讨论。它有效!
  • @Zl3n,你能发布你的解决方案吗?
  • 同样的问题,有解决办法吗?

标签: php facebook sdk


【解决方案1】:

我使用类,所以我将我的代码改编为您上面的示例。经过测试和工作的代码。

使用您使用的方法(请参阅指南here)获取您的用户访问令牌后,我们必须获取一个长期存在的访问令牌。将此添加到您的代码中:

session_start();
$helper = $fb->getRedirectLoginHelper();

try {
  $accessToken = $helper->getAccessToken();
} catch(Facebook\Exceptions\FacebookSDKException $e) {
  // There was an error communicating with Graph
  echo $e->getMessage();
  exit;
}

if (isset($accessToken)) {

    $client = $fb->getOAuth2Client();

    try {
      $accessToken = $client->getLongLivedAccessToken($accessToken);
    } catch(Facebook\Exceptions\FacebookSDKException $e) {
      echo $e->getMessage();
      exit;
    }


  $response = $fb->get('/me/accounts', (string) $accessToken);

    foreach ($response->getDecodedBody() as $allPages) {
        foreach ($allPages as $page ) {               

            if (isset($page['id']) && $page['id'] == $pageId) { // Suppose you save it as this variable
                $appAccessToken = (string) $page['access_token'];
                break;
            }
        }
    }

    $response = $fb->post(
        '/'.$pageId.'/feed',
        array(
            "message" => "Message",
            "link" => "http://www.example.com",
            "picture" => "http://www.example.net/images/example.png",
            "name" => "Title",
            "caption" => "www.example.com",
            "description" => "Description example"
        ),
        $appAccessToken
    );

    // Success
    $postId = $response->getGraphNode();
    echo $postId;

} elseif ($helper->getError()) {
  var_dump($helper->getError());
  var_dump($helper->getErrorCode());
  var_dump($helper->getErrorReason());
  var_dump($helper->getErrorDescription());
  exit;
}

说明:您必须知道您是哪些页面的管理员:

$response = $fb->get('/me/accounts', (string) $accessToken);

然后搜索表格以检索我们感兴趣的the access token of the page(我已选择获取所引用页面的 id)。

最后,简单运行SDK提供的post函数:

$response = $fb->post(
    '/'.$pageId.'/feed',
    array(
        "message" => "Message",
        "link" => "http://www.example.com",
        "picture" => "http://www.example.net/images/example.png",
        "name" => "Title",
        "caption" => "www.example.com",
        "description" => "Description example"
    ),
    $appAccessToken
);

【讨论】:

  • 我认为它可以正常工作,只是等待测试完成后发现,一旦我完成测试并且一切正常,就会接受它作为答案。
  • @llanato 我很安静,它运行良好 :) 我正在努力将它创建到包中
猜你喜欢
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-05
  • 2011-08-11
  • 2011-11-07
  • 1970-01-01
  • 2018-02-16
相关资源
最近更新 更多