Php 以编程方式登录facebook并发布到页面

Php 以编程方式登录facebook并发布到页面,php,facebook,facebook-graph-api,Php,Facebook,Facebook Graph Api,我有一个网站,我需要它不时地将状态更新发布到Facebook页面 使用我的个人Facebook帐户,我创建了一个应用程序和一个页面。到目前为止,通过将以下代码添加到我的网站,我已经能够以编程方式发布到我的页面的墙上: <?php session_start(); require 'src/config.php'; require 'src/facebook.php'; // Create our Application instance (replace this with yo

我有一个网站,我需要它不时地将状态更新发布到Facebook页面

使用我的个人Facebook帐户,我创建了一个应用程序和一个页面。到目前为止,通过将以下代码添加到我的网站,我已经能够以编程方式发布到我的页面的墙上:

    <?php
session_start();
require 'src/config.php';
require 'src/facebook.php';

// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
  'appId'  => $config['App_ID'],
  'secret' => $config['App_Secret'],
  'cookie' => true
));

if(isset($_POST['status']))
{
    $page = split("-",$_POST['page']);
    $page_token = $page[0];
    $page_id= $page[1];
    // status with link
    $publish = $facebook->api('/'.$page_id.'/feed', 'post',
            array('access_token' => $page_token,
            'message'=> $_POST['status'],
            'from' => $config['App_ID'],
            'to' => $page_id,
            'caption' => 'Caption',
            'name' => 'Name',
            'link' => 'http://www.example.com/',
            'picture' => 'http://www.phpgang.com/wp-content/themes/PHPGang_v2/img/logo.png',
            'description' => $_POST['status'].' via demo.PHPGang.com'
            ));
    //Simple status without link

    //$publish = $facebook->api('/'.$page_id.'/feed', 'post',
//        array('access_token' => $page_token,'message'=>$_POST['status'] .'   via PHPGang.com Demo',
//        'from' => $config['App_ID']
//        ));

    echo 'Status updated.<br>';
    $graph_url_pages = "https://graph.facebook.com/me/accounts?access_token=".$_SESSION['token'];
    $pages = json_decode(file_get_contents($graph_url_pages)); // get all pages information from above url.
    $dropdown = "";
    for($i=0;$i<count($pages->data);$i++)
    {
        $dropdown .= "<option value='".$pages->data[$i]->access_token."-".$pages->data[$i]->id."'>".$pages->data[$i]->name."</option>";
    }

    echo '
    <style>
    #status
    {
        width: 357px;
        height: 28px;
        font-size: 15px;
    }
    </style>
    '.$message.'
    <form action="index.php" method="post">
    Select Page on which you want to post status: <br><select name="page" id=status>'.$dropdown.'</select><br><br>
    <input type="text" name="status" id="status" placeholder="Write a comment...." /><input type="submit" value="Post On My Page!" style="padding: 5px;" />
    <form>';

}
elseif(isset($_GET['fbTrue']))
{
    $token_url = "https://graph.facebook.com/oauth/access_token?"
        . "client_id=".$config['App_ID']."&redirect_uri=" . urlencode($config['callback_url'])
        . "&client_secret=".$config['App_Secret']."&code=" . $_GET['code'];

    $response = file_get_contents($token_url);   // get access token from url
    $params = null;
    parse_str($response, $params);

    $_SESSION['token'] = $params['access_token'];

    $graph_url_pages = "https://graph.facebook.com/me/accounts?access_token=".$_SESSION['token'];
    $pages = json_decode(file_get_contents($graph_url_pages)); // get all pages information from above url.
    $dropdown = "";
    for($i=0;$i<count($pages->data);$i++)
    {
        $dropdown .= "<option value='".$pages->data[$i]->access_token."-".$pages->data[$i]->id."'>".$pages->data[$i]->name."</option>";
    }

    echo '
    <style>
    #status
    {
        width: 357px;
        height: 28px;
        font-size: 15px;
    }
    </style>
    '.$message.'
    <form action="index.php" method="post">
    Select Page on which you want to post status: <br><select name="page" id=status>'.$dropdown.'</select><br><br>
    <input type="text" name="status" id="status" placeholder="Write a comment...." /><input type="submit" value="Post On My Page!" style="padding: 5px;" />
    <form>';    
}
else
{
    echo 'Connect &nbsp;&nbsp;<a href="https://www.facebook.com/dialog/oauth?client_id='.$config['App_ID'].'&redirect_uri='.$config['callback_url'].'&scope=publish_pages,manage_pages"><img src="./images/login-button.png" alt="Sign in with Facebook"/></a>';
}
这就是您需要的:

  • 使用
    发布页面
    管理页面
  • 生成一个
  • 使用
    /me/accounts
    获取您管理的所有页面的列表,它将包括每个页面的扩展页面标记
  • 使用扩展页面标记进行发布,它将永远有效,或者至少在您更改密码或更改应用程序密码之前有效
有关访问令牌以及如何获取它们的更多信息


请评论否决投票的原因。我的答案是100%正确,但如果有任何错误,我很乐意改进。我相信这并不能回答这个问题,因为他说他遇到的问题与另一个涉及“离线访问”的堆栈问题相同,后者自2012年以来一直在贬值。我和Aaron有同样的问题,所以如果你能巩固这一点,那就太棒了。那么确切的问题是什么?我很乐意回答与该主题相关的其他问题,但我的回答包括关于如何获得扩展页面令牌(这是他需要在没有用户登录的情况下发布的内容)的非常详细的描述,以及一些其他链接。真的没有什么可补充的了。他使用的是一个非常旧的php sdk,他肯定应该升级。换句话说,你需要一个永远有效的令牌,我的答案告诉你如何获得一个。对不起,你是对的。我的问题涉及一个封闭的群体,而不是一个页面。我以为一组是由几页组成的,但我认为这是错误的。我的解决方案在于长寿命的访问令牌和该令牌的刷新。很抱歉浪费你的时间,谢谢!