【问题标题】:Post on Facebook profile/page timeline using Facebook Graph API v3.1 PHP SDK使用 Facebook Graph API v3.1 PHP SDK 在 Facebook 个人资料/页面时间轴上发布
【发布时间】:2018-09-21 14:54:39
【问题描述】:

如您所知,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

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

为此,我使用了下面提到的代码以及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>';
}

?>

我的文件级别如下图所示。

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

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

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

【问题讨论】:

    标签: php facebook facebook-graph-api facebook-php-sdk


    【解决方案1】:

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

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

    对于页面,您可以使用 manage_pagespublish_pages 发布到带有页面令牌的页面。

    【讨论】:

    • 是的。 developers.facebook.com/blog/post/2018/04/24/… "publish_actions 权限将被弃用。此权限授予应用程序以登录用户身份向 Facebook 发布帖子的权限。从今天开始创建的应用程序将无权访问此权限...不会批准其他应用程序使用publish_actions 通过应用审核。鼓励目前使用 publish_actions 的开发者切换到 Facebook 的 Web、iOS 和 Android 共享对话框。"
    • (不,为了预测可能的后续行动,除了共享方法之外没有其他“解决方法”。Facebook 正在坚定地在此压制。)
    • 感谢您清除所有内容并节省我在互联网上搜索的时间。休息一下,我将使用这个概念来处理页面,而忘记为配置文件执行此操作。 :)
    • @MuhammadHassan 请不要在不相关的问题上随意标记人们以引起对您的新问题的关注。
    • @ceejayoz 新问题与此有关,我将在此评论中发布您的回复,即仍有办法为开发人员获得这些许可,但想知道如何。打扰了,抱歉。
    【解决方案2】:

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

    首先,您必须在开发模式下开发您的应用,然后您需要使用这些权限提交 App Review。

    此过程要求您上传带有演示的截屏视频,并将应用程序放在公共场所,以便 Facebook 审核团队可以接触到它并对其进行测试。

    还有很长的路要走..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      相关资源
      最近更新 更多