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

时间:2018-09-21 14:54:39

标签: 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 Upgrade Tool来了解这可能会对您的应用产生影响。有关更多详细信息,请参见changelog

为此,我创建了一个具有某些设置的新应用,如以下屏幕截图所示。

enter image description here

enter image description here

enter image description here

为此,我将下面提到的代码与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;
}
?>

index.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>';
}

?>

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

enter image description here

最后,在完成所有上述设置和代码后,当我尝试运行页面时,我得到了登录脸部按钮,然后单击此处,出现了以下屏幕截图错误。

enter image description here

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

我试图在Internet上找到任何可行的解决方案,但是它们都已经过时了,新的Facebook Graph API v3.1都无法使用。

2 个答案:

答案 0 :(得分:3)

  

我想要的是简单地发布我想要的内容,而不显示任何POPUP或对话框

对于用户个人资料而言,这不再可行。您必须改为使用“共享对话框”。 10被删除,没有替代品或解决方法。

对于页面,您可以使用publish_actionsmanage_pages将具有页面令牌的页面发布到页面上。

答案 1 :(得分:0)

是的,您应该在页面供稿而不是个人供稿上发布。 正如luschn所说,您需要manage_pagespublish_pages权限才能获取正确的页面访问令牌。

首先,您必须以开发人员模式开发应用程序,然后需要使用这些权限提交以供App Review使用。

此过程要求您上载带有演示的截屏视频,并将该应用程序放置在公共场所,以便Facebook Review团队可以访问并对其进行测试。

还有很长的路要走。