使用 Facebook Graph API v3.1 PHP SDK 在 Facebook 个人资料/页面时间轴上发布

Muh*_*san 2 php facebook facebook-graph-api facebook-php-sdk

如您所知,Facebook 于 2018 年 7 月 26 日推出了新的 Graph API v3.1,这为开发人员改变了很多事情。我现在的问题之一是如何使用 Facebook Graph API v3.1 PHP SDK 在 Facebook 个人资料/页面时间轴上共享/发布?

提醒:Graph API v2.7 将于 2018 年 10 月 5 日弃用。请使用API 升级工具了解这可能会对您的应用产生什么影响。有关更多详细信息,请参阅变更日志

为此,我创建了一个新的应用程序,其中包含一些设置,如下面的屏幕截图所示。

在此输入图像描述

在此输入图像描述

在此输入图像描述

为此,我使用了下面提到的代码以及facebook-php-graph-sdk-5.x

fbConfig.php

<?php
if(!session_id()){
    session_start();
}

// Include the autoloader provided in the SDK
require_once __DIR__ . '/facebook-php-graph-sdk-5.x/autoload.php';

// Include required libraries
use Facebook\Facebook;
use Facebook\Exceptions\FacebookResponseException;
use Facebook\Exceptions\FacebookSDKException;

/*
 * Configuration and setup Facebook SDK
 */
$appId         = 'APP_ID'; //Facebook App ID
$appSecret     = 'APP_SECRET'; //Facebook App Secret
$redirectURL   = 'MAIN_PAGE_URL_SAME_AS_IN_APPS_SETTING'; //Callback URL
$fbPermissions = array('publish_actions'); //Facebook permission

$fb = new Facebook(array(
    'app_id' => $appId,
    'app_secret' => $appSecret,
    'default_graph_version' => 'v2.6',
));

// Get redirect login helper
$helper = $fb->getRedirectLoginHelper();

// Try to get access token
try {
    if(isset($_SESSION['facebook_access_token'])){
        $accessToken = $_SESSION['facebook_access_token'];
    }else{
        $accessToken = $helper->getAccessToken();
    }
} catch(FacebookResponseException $e) {
     echo 'Graph returned an error: ' . $e->getMessage();
      exit;
} catch(FacebookSDKException $e) {
    echo 'Facebook SDK returned an error: ' . $e->getMessage();
      exit;
}
?>
Run Code Online (Sandbox Code Playgroud)

索引.php

<?php
// Include FB configuration file
require_once 'fbConfig.php';

if(isset($accessToken)){
    if(isset($_SESSION['facebook_access_token'])){
        $fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
    }else{
        // Put short-lived access token in session
        $_SESSION['facebook_access_token'] = (string) $accessToken;

        // OAuth 2.0 client handler helps to manage access tokens
        $oAuth2Client = $fb->getOAuth2Client();

        // Exchanges a short-lived access token for a long-lived one
        $longLivedAccessToken = $oAuth2Client->getLongLivedAccessToken($_SESSION['facebook_access_token']);
        $_SESSION['facebook_access_token'] = (string) $longLivedAccessToken;

        // Set default access token to be used in script
        $fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
    }

    //FB post content
    $message = 'Test message from stackoverflow.com website';
    $title = 'Post From Website';
    $link = 'http://www.stackoverflow.com/';
    $description = 'stackoverflow is simply awesome.';
    $picture = 'https://i.stack.imgur.com/MybMA.png';

    $attachment = array(
        'message' => $message,
        'name' => $title,
        'link' => $link,
        'description' => $description,
        'picture'=>$picture,
    );

    try{
        // Post to Facebook
        $fb->post('/me/feed', $attachment, $accessToken);

        // Display post submission status
        echo 'The post was published successfully to the Facebook timeline.';
    }catch(FacebookResponseException $e){
        echo 'Graph returned an error: ' . $e->getMessage();
        exit;
    }catch(FacebookSDKException $e){
        echo 'Facebook SDK returned an error: ' . $e->getMessage();
        exit;
    }
}else{
    // Get Facebook login URL
    $fbLoginURL = $helper->getLoginUrl($redirectURL, $fbPermissions);

    // Redirect to Facebook login page
    echo '<a href="'.$fbLoginURL.'"><img src="https://www.freeiconspng.com/uploads/facebook-login-button-png-11.png" /></a>';
}

?>
Run Code Online (Sandbox Code Playgroud)

我的文件级别如下面的屏幕截图所示。

在此输入图像描述

最后,在完成上述所有设置和代码之后,当我尝试运行我的页面时,我得到了登录 FACEBOOK 按钮,点击那里后,我得到了下面的屏幕截图错误。

在此输入图像描述

我想要的是简单地发布我想要的内容,而不显示任何 POPUP 或对话框,以便我可以通过我的 PHP 代码轻松使用它。

我试图通过互联网找到任何可行的解决方案,但现在都已经过时了,现在没有任何东西可以与新的 Facebook Graph API v3.1 一起使用。

lus*_*chn 5

我想要的是简单地发布我想要的内容而不显示任何弹出窗口或对话框

对于用户配置文件来说,这不再可能了。您必须改用共享对话框。publish_actions已被删除,并且没有替代或解决方法。

对于页面,您可以使用manage_pagespublish_pages通过页面令牌发布到页面。

  • 是的。https://developers.facebook.com/blog/post/2018/04/24/new-facebook-platform-product-changes-policy-updates/ “publish_actions 权限将被弃用。此权限授予应用程序发布帖子的权限Facebook 作为登录用户。从今天开始创建的应用程序将无法访问此权限...不会再有任何应用程序通过应用程序审核被批准使用publish_actions。鼓励当前使用publish_actions 的开发人员切换到Facebook 的网络共享对话框、iOS 和 Android。” (3认同)
  • (不,为了预测可能的后续行动,除了分享方法之外没有“解决方法”。Facebook 正在**坚定地**压制这一点。) (3认同)
  • @MuhammadHassan 请不要随机在不相关的问题上标记人们以引起人们对您的新问题的注意。 (2认同)