douzhu3367
2010-10-29 19:55 阅读 60
已采纳

Facebook Graph API PHP SDK在页面上发布为页面

It's final try with PHP, if it fails, I'll try with JS. So my goal is to post on FB page as "Page name" through PHP: this is what I want to get

View 1

But all I get is shown pic below. Also, it's visible ONLY to this profile (not to friends/ppl who like/etc.).

View 2

This is my current code

function post_facebook($data=null, $redir = null){
        $result = "";
        require_once (ROOT. "/apps/configuration/models/ConfigurationItem.php");
        require_once (ROOT . "/components/facebook/facebook.php");

        $this->ConfigurationItem = new ConfigurationItem($this->getContext());

        $row=$this->ConfigurationItem->findByCatKeyItemKey('system','facebook_login');
        $apiid=$row['value']; <= Correct apiid

        $row=$this->ConfigurationItem->findByCatKeyItemKey('system','facebook_pass');
        $secret=$row['value']; <= Correct secret key

        $facebook = new Facebook(array(
          'appId'  => $apiid,
          'secret' => $secret,
          'cookie' => true,
        ));

        $session = $facebook->getSession();
        $me = null;
        if ($session) {
            try {
                $uid = $facebook->getUser();
                $me = $facebook->api('/me');
            } catch (FacebookApiException $e) {
                error_log($e);
            }
            $message=$data['facebook_text'];
            $attachment = array(
                'message' => $data['facebook_text'],
                'name' => $data['name'],
                'link' => $this->getLinkToLatestNews(),
                'description' => '',
            );

            try {
                $facebook->api('/PAGE ID/feed/', 'post', $attachment);
                $result = "Facebook: Sent";
            } catch (FacebookApiException $e) {
                $result = "Facebook: Failed";
                error_log($e);
            }
        } else {
            $login_url = $facebook->getLoginUrl();
            header("Location: ".$login_url);
            exit;
        }

        echo $result;
        exit;
        //return $result;

    }

What I'm doing wrong? I couldn't find anything in API documentation/top google results, only for JS. Thanks for help!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    duanpai1033 duanpai1033 2010-10-29 20:05

    You'll need to make sure you're requesting the 'manage_pages' permission for the user. Once you've got that you can do $facebook->api('/me/accounts') and you'll receive a token back (along with the page info) that you can use to post on the page as the page.

    点赞 评论 复制链接分享
  • duanjigua5753 duanjigua5753 2014-01-09 21:42

    I struggled with this most of the day, then found that not using setAccessToken(page_access_token) was the only thing preventing it from working for me. I found that in a stackoverflow post from 18 months ago. I'll put my solution here, for anyone who has this question in the future:

    protected $scope = "email,publish_stream,manage_pages";
    
        $url = "{$api_url}/{$fbusername}/accounts?access_token=".$access_token;
        $response = json_decode(file_get_contents($url));
        foreach($response->data as $data) {
            try
            {
                $res = $this->SDK->setAccessToken($data->access_token);
                $res = $this->SDK->api(
                    "{$data->id}/feed",
                    "POST",
                    array('link' => 'www.example.com',
                          'message' => 'This is a test message from php',)
                );
                log::debug(__FUNCTION__, print_r($res,true));
            }
            catch (Exception $e)
            {
                log::debug(__FUNCTION__, $e->getType().": ".$e->getMessage());
            }
    
        }
    
    点赞 评论 复制链接分享
  • drnf593779 drnf593779 2018-11-15 16:41
    $feed = '/v2.8/' . $pageID . '/' . "feed";
    $params = array(
     "access_token" => AQUI TU TOKEN // see: https://developers.facebook.com/docs/facebook-login/access-tokens/
    );
    $params[ "link" ] = "https://zapatillasnewbalancebaratas.blogspot.com/2018/11/zapatilla-new-balance-ml515-col.html";
    $params[ "message" ] = "Zapatilla New Balance Ml515 Col";
    $params[ "method" ] = POST;
    
    $graph_url = "https://graph.facebook.com" . $feed;
    
    
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $graph_url);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    
            $output = curl_exec($ch);
            echo $output;
            curl_close($ch);
    
    点赞 评论 复制链接分享

相关推荐