如何使用 PHP SDK v5 从 Facebook 页面删除 post

how to delete a post from Facebook page using PHP SDK v5

我正在使用 Facebook PHP SDK v5 将 post 发送到我管理的页面。当 posting a link 到页面时,下面的代码非常有效。但是,当我尝试修改此代码以删除 post 时,它一直返回错误:

Graph returned a page request error: Unknown path components: /xxxxxxx_xxxxxxxxx

xxxxxxx_xxxxxxxxx 是我要删除的 postID

我不知道如何调整我的工作代码以删除 post 而不是发布它们。有谁知道如何进行这项工作?

将 post 发布到页面的工作代码:

<?php
    function facebook(){
        include_once $_SERVER['DOCUMENT_ROOT']."/Facebook/autoload.php";
        $permissions = ['manage_pages', 'publish_pages'];
        $callback = "https://www.my-domain.com/my-callback-url.html?fb=redirect";
        $pageID = 'xxxxxxxxxxxx';
        $linkToPost = 'https://www.test-post.com';

        $fb = new Facebook\Facebook([
          'app_id' => 'xxxxxxxxxxx',
          'app_secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxx',
          'default_graph_version' => 'v2.10',
          ]);

    $helper = $fb->getRedirectLoginHelper();

    try {
        if (isset($_SESSION['facebook_access_token'])) {
            $accessToken = $_SESSION['facebook_access_token'];
        } else {
            $accessToken = $helper->getAccessToken();
        }
    } catch(Facebook\Exceptions\FacebookResponseException $e) {
        // When Graph returns an error
        $res['error'] = 'Error: Graph returned a session error: ' . $e->getMessage();
        return $res;
    } catch(Facebook\Exceptions\FacebookSDKException $e) {
        // When validation fails or other local issues
        $res['error'] = 'Error: Facebook SDK returned a session error: ' . $e->getMessage();
        return $res;
    }

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

            // OAuth 2.0 client handler
            $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;

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

        // getting basic info about user
        try {
            $profile_request = $fb->get('/me');
            $profile = $profile_request->getGraphNode();
        } catch(Facebook\Exceptions\FacebookResponseException $e) {
            // When Graph returns an error
            $res['error'] = 'Error: Graph returned a profile request error: ' . $e->getMessage();
            session_destroy();
            return $res;
        } catch(Facebook\Exceptions\FacebookSDKException $e) {
            // When validation fails or other local issues
            $res['error'] = 'Error: Facebook SDK returned a profile request error: ' . $e->getMessage();
            return $res;
        }       

        $response = $fb->get('/me/accounts', (string) $accessToken);
        foreach ($response->getDecodedBody() as $allPages) {
            foreach ($allPages as $page ) {               

                if (isset($page['id']) && (string)$page['id'] == $pageID) {
                    $pageAccessToken = (string) $page['access_token'];
                    break;
                }
            }
        }
        try{
            $post = $fb->post('/'.$pageID.'/feed', array('link' => $linkToPost), $pageAccessToken);
            $post = $post->getGraphNode()->asArray();
            $res['success'] =  "Successfully Posted To Facebook.  The ID of this post is: ".$post['id'];
            return $res;
        }catch(Facebook\Exceptions\FacebookResponseException $e) {
            // When Graph returns an error
            $res['error'] =  'Error: Graph returned a page request error: ' . $e->getMessage();
            session_destroy();
            return $res;
        } catch(Facebook\Exceptions\FacebookSDKException $e) {
            // When validation fails or other local issues
            $res['error'] =  'Error: Facebook SDK returned a page request error: ' . $e->getMessage();
            return $res;
        }
    }else{
        $loginUrl = $helper->getLoginUrl($callback, $permissions);
        $res['login'] =  $loginUrl;
        return $res;
    }
}
?>

我尝试修改上面的工作代码以删除 posts。不工作:

基本上我改变了:

 $post = $fb->post('/'.$pageID.'/feed', array('link' => $linkToPost), $pageAccessToken);

收件人:

 $post = $fb->delete('/'.$pageID.'/feed/'.$postIDtoDelete ,array(), $pageAccessToken);

代码:

<?php
    function facebook(){
        include_once $_SERVER['DOCUMENT_ROOT']."/Facebook/autoload.php";
        $permissions = ['manage_pages', 'publish_pages'];
        $callback = "https://www.my-domain.com/my-callback-url.html?fb=redirect";
        $pageID = 'xxxxxxxxxxxx';
        $postIDtoDelete = 'xxxxxxx_xxxxxxxxx';
        $linkToPost = 'https://www.test-post.com';

        $fb = new Facebook\Facebook([
          'app_id' => 'xxxxxxxxxxx',
          'app_secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxx',
          'default_graph_version' => 'v2.10',
          ]);

    $helper = $fb->getRedirectLoginHelper();

    try {
        if (isset($_SESSION['facebook_access_token'])) {
            $accessToken = $_SESSION['facebook_access_token'];
        } else {
            $accessToken = $helper->getAccessToken();
        }
    } catch(Facebook\Exceptions\FacebookResponseException $e) {
        // When Graph returns an error
        $res['error'] = 'Error: Graph returned a session error: ' . $e->getMessage();
        return $res;
    } catch(Facebook\Exceptions\FacebookSDKException $e) {
        // When validation fails or other local issues
        $res['error'] = 'Error: Facebook SDK returned a session error: ' . $e->getMessage();
        return $res;
    }

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

            // OAuth 2.0 client handler
            $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;

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

        // getting basic info about user
        try {
            $profile_request = $fb->get('/me');
            $profile = $profile_request->getGraphNode();
        } catch(Facebook\Exceptions\FacebookResponseException $e) {
            // When Graph returns an error
            $res['error'] = 'Error: Graph returned a profile request error: ' . $e->getMessage();
            session_destroy();
            return $res;
        } catch(Facebook\Exceptions\FacebookSDKException $e) {
            // When validation fails or other local issues
            $res['error'] = 'Error: Facebook SDK returned a profile request error: ' . $e->getMessage();
            return $res;
        }       

        $response = $fb->get('/me/accounts', (string) $accessToken);
        foreach ($response->getDecodedBody() as $allPages) {
            foreach ($allPages as $page ) {               

                if (isset($page['id']) && (string)$page['id'] == $pageID) {
                    $pageAccessToken = (string) $page['access_token'];
                    break;
                }
            }
        }
        try{
            $post = $fb->delete('/'.$pageID.'/feed/'.$postIDtoDelete ,array(), $pageAccessToken);
            $res['success'] =  "Successfully Deleted Posted From Facebook.  Response is:".$post;
            return $res;
        }catch(Facebook\Exceptions\FacebookResponseException $e) {
            // When Graph returns an error
            $res['error'] =  'Error: Graph returned a page request error: ' . $e->getMessage();
            session_destroy();
            return $res;
        } catch(Facebook\Exceptions\FacebookSDKException $e) {
            // When validation fails or other local issues
            $res['error'] =  'Error: Facebook SDK returned a page request error: ' . $e->getMessage();
            return $res;
        }
    }else{
        $loginUrl = $helper->getLoginUrl($callback, $permissions);
        $res['login'] =  $loginUrl;
        return $res;
    }
}

?>

没关系,我只需要编辑:

$post = $fb->delete('/'.$pageID.'/feed/'.$postIDtoDelete ,array(), $pageAccessToken);

收件人:

$post = $fb->delete('/'.$postIDtoDelete ,array(), $pageAccessToken);

现在工作正常