【问题标题】:Facebook post to fan page using php sdk5 graph api 2.4Facebook 使用 php sdk5 graph api 2.4 发布到粉丝页面
【发布时间】:2015-07-26 19:27:42
【问题描述】:

我正在尝试使用 php SDK v5 和 Graph API 2.4 为粉丝页面创建一个自动发布脚本!

我创建了两个脚本:

1 - 使用 publish_actions 和 manage_pages 权限获取页面访问令牌列表。 (返回正常)

2 - 离线发布到粉丝专页。 (失败)

1) 第一个脚本运行良好:

<?php
session_start(); 

require_once __DIR__ . '/facebook-php-sdk-v4-5.0-dev/src/Facebook/autoload.php';

// config APP_ID e SECRET
define('APP_ID', 'xxxxxxxxxxxxxxx');
define('APP_SECRET', 'xxxxxxxxxxxxxxxxxxxxxx');

// instancia
$fb = new Facebook\Facebook([
    'app_id'     => APP_ID,
    'app_secret' => APP_SECRET,
    'default_graph_version' => 'v2.4'
]);

if(isset($_SESSION['fb_access_token'])) {
    $accessToken = $_SESSION['fb_access_token'];

} else {

    $helper = $fb->getRedirectLoginHelper();
    try {
        $accessToken = $helper->getAccessToken();

        if(isset($accessToken)) {
            $oAuth2Client = $fb->getOAuth2Client();

            // longlived access token
            if (!$accessToken->isLongLived()) {
                $accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken); 
            }
        }

    } catch(Facebook\Exceptions\FacebookResponseException $e) {
        echo 'Graph returned an error: ' . $e->getMessage();
        exit;
    } catch(Facebook\Exceptions\FacebookSDKException $e) {
        echo 'Facebook SDK returned an error: ' . $e->getMessage();
        exit;
    }
}

if(isset($accessToken)) {
    // Logged in!
    $_SESSION['fb_access_token'] = (string) $accessToken;

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

        echo '<pre>';
        print_r($response->getDecodedBody());
        echo '</pre>';

    } catch(Facebook\Exceptions\FacebookResponseException $e) {
        echo 'Graph returned an error: ' . $e->getMessage();
        exit;
    } catch(Facebook\Exceptions\FacebookSDKException $e) {
        echo 'Facebook SDK returned an error: ' . $e->getMessage();
        exit;
    } 
} else {
    $helper = $fb->getRedirectLoginHelper();

    $redirect_url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    $loginUrl = $helper->getLoginUrl($redirect_url, [ 'manage_pages', 'publish_actions' ]);
    echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>';
}

2)第二个脚本失败:(即使我与 facebook 断开连接,该脚本也应该可以工作):

<?php
session_start(); 

// autoloader 
require_once __DIR__ . '/facebook-php-sdk-v4-5.0-dev/src/Facebook/autoload.php';

define('APP_ID', 'xxxxxxxxxxxxxxx');
define('APP_SECRET', 'xxxxxxxxxxxxxxxxxxxxxx');
$page_access_token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

// instance
$fb = new Facebook\Facebook([
    'app_id'     => APP_ID,
    'app_secret' => APP_SECRET,
    'default_graph_version' => 'v2.4',
]);

$linkData = [
  'link' => 'http://www.example.com',
  'message' => 'User provided message',
];

try {
    $response = $fb->post('/me/feed', $linkData, $page_access_token);

} catch(Facebook\Exceptions\FacebookResponseException $e) {
    echo 'Graph returned an error: ' . $e->getMessage();
    exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
    echo 'Facebook SDK returned an error: ' . $e->getMessage();
    exit;
}

我收到错误消息:

图表返回错误:验证访问令牌时出错:会话与当前存储的会话不匹配。这可能是因为用户在创建会话后更改了密码,或者 Facebook 出于安全原因更改了会话。

在带有 php sdk v3 的旧图形 api 版本中,它以类似的方式工作......

怎么了?

【问题讨论】:

  • 你知道你需要 publish_pages 作为页面发布,对吧?
  • 也就是说,它现在正在工作。我忘记了 publish_pages !谢谢..

标签: php facebook facebook-graph-api


【解决方案1】:

正如我在 cmets 中所建议的,您需要 publish_pagespost as Page。使用publish_pages授权后,您可以通过/me/accounts获得一个Page Token,并使用生成的Token作为Page发布。

如果要存储扩展页面令牌,请确保使用它。永久有效。

有关访问令牌的更多信息:

【讨论】:

  • 实际上,我不明白你们在说什么。我搜索了链接,但没有得到任何诸如“publish_pages”之类的词。你能开始吗?
  • 我已经向 api 参考添加了一个链接(“作为页面发布”)。您需要了解的有关发布到页面的所有信息都在其中。
  • 谢谢。授予 publish_pages 权限帮助了我。
  • 我也不明白你们在说publish_pages我该怎么办?
  • 请阅读 facebook 文档,了解有关登录过程的大量信息,包括不同语言的示例代码。
猜你喜欢
  • 1970-01-01
  • 2011-11-06
  • 2012-10-24
  • 2012-01-30
  • 2011-04-07
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多