facebook使用php添加页面选项卡


facebook add page tab using php?

我一直试图找到一种方法,使用php-sdk在facebook中添加页面选项卡,但没有成功。

我搜索了几乎整个谷歌,stackoverflow和facebook开发者部分。

甚至不要让我开始使用facebook开发者部分,因为它是人类编写的最糟糕的文档。(如果是人类写的(。

我发现的其他东西基本上都是在浏览器中使用URL,比如:

https://www.facebook.com/dialog/pagetab?app_id={YOUR_APP_ID}&redirect_uri=https://facebook.com

这不是我想要的,因为那是简单的方法。

我需要知道,如何使用PHP SDK来获得相同的结果。

我已经开发了一个应用程序,我还可以使用php-sdkmanage_pages,并且我可以获得用户page_id。如果用户允许管理页面的权限,我可以简单地在php页面上的输入字段中回显page_id

现在,我需要知道如何在php页面中使用所选页面(page_id(来在该页面中创建/ADD page选项卡。

有人能给我指一个正确的方向吗?

提前谢谢。

我还尝试了以下代码,我认为它会起作用,但我得到的只是空白页:

<?php
require 'facebook.php';

$facebook->api('/I WILL PUT MY PAGE ID THERE/tabs', 'POST', array(
  'app_id'=>'MY APP ID GOES THERE',
  'access_token'=>'MY ACCESS TOKEN GOES THERE'
));
/* handle the result */
?>

编辑:

这是从facebook开发者部分获得的代码,它什么都不做:

PHP:

<?php
if (isset($_POST['txtName'])) {
$request = new FacebookRequest(
  $session,
  'POST',
  '/236482648726347826/tabs',
  array (
    'app_id' => '64564564645645646456',
  )
);
$response = $request->execute();
$graphObject = $response->getGraphObject();
}
?>

html部件:

<form id="form" name="form" method="post" action="index">
<input id="text" name="txtName">
</form>

这不是要打开一个添加页面选项卡对话框吗?或者在最坏的情况下,在场景后面添加页面选项卡?

目前,上面的代码在表单提交后会生成一个空白页面。

第二次编辑:

这是我的完整代码:

index.php代码:

    <?php
    include_once("config.php");
    if ($fbuser) {
      try {
            $user_profile = $facebook->api('/me/accounts');
            //Get user pages details using Facebook Query Language (FQL)
            $fql_query = 'SELECT page_id, name, page_url FROM page WHERE page_id IN (SELECT page_id FROM page_admin WHERE uid='.$fbuser.')';

            $postResults = $facebook->api(array( 'method' => 'fql.query', 'query' => $fql_query));
        } catch (FacebookApiException $e) {
            echo $e->getMessage();
            $fbuser = null;
      }
    }else{
            //Show login button for guest users
            $loginUrl = $facebook->getLoginUrl(array('redirect_uri'=>$homeurl,'scope'=>$fbPermissions));
            echo '<a href="'.$loginUrl.'"><img src="images/facebook-login.png" border="0"></a>';
            $fbuser = null;
    }
    if($fbuser && empty($postResults))
    {
            /*
            if user is logged in but FQL is not returning any pages, we need to make sure user does have a page
            OR "manage_pages" permissions isn't granted yet by the user. 
            Let's give user an option to grant application permission again.
            */
            $loginUrl = $facebook->getLoginUrl(array('redirect_uri'=>$homeurl,'scope'=>$fbPermissions));
            echo '<br />Could not get your page details!';
            echo '<br /><a href="'.$loginUrl.'">Click here to try again!</a>'; 
    }elseif($fbuser && !empty($postResults)){
    //Everything looks good, show message form.
    ?>
    <?php
    //echo $access_token;
    if (isset($_POST['txtName'])) {
    $facebook->api('/MY PAGE ID/tabs', 'POST', array(
      'app_id'=>'MY APP ID',
      'access_token'=>$access_token
    ));

    }
    ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Post to user Page Wall</title>
<link href="style.css" rel="stylesheet" type="text/css" />
<script src="jquery.min.js"></script>
</head>
<body>
<div class="fbpagewrapper">
<div id="fbpageform" class="pageform">
<form id="form" name="form" method="post" action="index">
<h1>Post to Facebook Page Wall</h1>
<p>Choose a page to post. <?php
/*
Get Log out URL
Due to some bug or whatever, SDK still thinks user is logged in even
after user logs out. To deal with it, user is redirected to another page "logged-out.php" after logout
it is working fine for me with this trick. Hope it works for you too.
*/
$logOutUrl = $facebook->getLogoutUrl(array('next'=>$homeurl.'logged-out.php'));
echo '<a href="'.$logOutUrl.'">Log Out</a>';
?>
</p>
<label>Pages
<span class="small">Select a Page</span>
</label>
<select name="userpages" id="upages">
    <?php
    foreach ($postResults as $postResult) {
            echo '<option value="'.$postResult["page_id"].'">'.$postResult["name"].'</option>';
        }
    ?>
</select>
<input id="text" name="txtName">
<!--<label>Message
<span class="small">Write something to post!</span>
</label>
<textarea name="message"></textarea>-->
<button type="submit" class="button" id="submit_button">Send Message</button>
<div class="spacer"></div>
</form>
</div>
</div>
</body>
</html>
<?php
}
?>

<script>
$('#upages').bind('change click keyup', function() {
  $('#text').val($(this).val());
});
</script>
</body>
</html>

配置文件:

<?php
include_once("inc/facebook.php"); //include facebook SDK
######### edit details ##########
$appId = 'MY APP ID'; //Facebook App ID
$appSecret = 'MY APP SECRET NUMBER'; // Facebook App Secret
$return_url = 'https://MYDOMAIN.COM/';  //return url (url to script)
$homeurl = 'https://MYDOMIAN.COM';  //return to home
$fbPermissions = 'publish_stream,manage_pages';  //Required facebook permissions
##################################
//Call Facebook API
$facebook = new Facebook(array(
  'appId'  => $appId,
  'secret' => $appSecret
));
$fbuser = $facebook->getUser();
$access_token = $facebook->getAccessToken();
?>

正如您所看到的,我在配置文件中获得了访问令牌,如下所示:$access_token = $facebook->getAccessToken();

当我从用户那里获得管理页面权限后,在页面上回显$access_token时,我会在页面上得到一个长数字。

所以,我试着使用这样的令牌:

<?php
//echo $access_token;
if (isset($_POST['txtName'])) {
$facebook->api('/MY PAGE ID/tabs', 'POST', array(
  'app_id'=>'MY APP ID',
  'access_token'=>$access_token
));

}
?>

但当我提交表单时,我的页面上没有"添加页面对话框"。

这是我的问题。现在有人能帮帮我吗,因为我在过去的4天里完全迷路了。

感谢

根据https://developers.facebook.com/docs/graph-api/reference/v2.0/page/tabs/#publish您需要使用页面访问令牌来执行此操作。

您可以通过向/me/accounts发出请求(具有manage_pages权限(并使用相关页面的相应访问令牌来获得一个。

参见

  • https://developers.facebook.com/docs/graph-api/reference/v2.0/user/accounts/#fields
  • https://developers.facebook.com/docs/facebook-login/access-tokens#pagetokens
  • https://developers.facebook.com/docs/reference/fql/page/#columns