facebook使用php添加页面选项卡?

时间:2014-07-08 13:44:23

标签: php facebook

我一直在尝试使用php sdk在facebook中添加页面标签,但无济于事。

我几乎搜索了整个google,stackoverfllow和facebook开发者部分。

甚至没有让我开始使用facebook开发人员部分,因为这是人类最糟糕的书面文档。(如果它是由人类编写的)。

我发现的其他内容基本上都是在浏览器中使用URL,如下所示:

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

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

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

我开发了一款应用,我也可以 manage_pages 使用php sdk,我可以让用户 page_id 。如果用户允许管理页面的权限,我可以在我的php页面上回显 inputfield 中的page_id

现在,我需要知道如何在我的php页面中使用所选页面(page_id)在该页面中创建/添加PAGE TAB。

有人可以指点我正确的方向吗?

提前致谢。

我也尝试过以下代码,但我会工作,而且我得到的只是空白页:

<?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 PART:

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

不是假设打开ADD PAGE TAB对话框,或者在最坏的情况下添加场景后面的页面选项卡?

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

第二次编辑:

这是我的完整代码:

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天完全失去了。

由于

1 个答案:

答案 0 :(得分:0)

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

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