admin管理员组

文章数量:1312852

I have defined an access token and have the required permissions to 'like' a facebook page, but firebug keeps giving me the error in the title. Please don't mark this post as duplicate, because I've looked on the posts regarding the problem and I couldn't find an answer that would fit my particular case in any way. I can't understand why or how should I solve it. My code is the following:

utils.php

    <?php
require_once('sdk/src/facebook.php');
require_once("AppInfo.php");
/**
 * @return the value at $index in $array or $default if $index is not set.
 */
function idx(array $array, $key, $default = null) {
  return array_key_exists($key, $array) ? $array[$key] : $default;
}

function he($str) {
  return htmlentities($str, ENT_QUOTES, "UTF-8");
}
$facebook = new Facebook(array(
'appId'  => AppInfo::appID(),
'secret' => AppInfo::appSecret(),
'sharedSession' => true,
'trustForwarded' => true,
'file_upload' =>true
));
$user_id = $facebook->getUser();
if($user_id)
{
  $logoutUrl =$facebook->getLogoutUrl();
}
  else
  {
      $loginUrl=$facebook->getLoginUrl();
  }
if ($user_id) {
try {
  // Fetch the viewer's basic information
  $user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
  // If the call fails we check if we still have a user. The user will be
  // cleared if the error is because of an invalid accesstoken
  if (!$facebook->getUser()) {
    header('Location: '. AppInfo::getUrl($_SERVER['REQUEST_URI']));
    exit();
  }
}
}
?>

likes.php

      <?php

require_once("sdk/src/facebook.php"); 
require_once("utils.php");
require_once("AppInfo.php");
$permissions = $facebook->api('/me/permissions    ');
if( array_key_exists('publish_actions', $permissions['data'][0]) ) {
    // Permission is granted!
    // Do the related task
    //$post_id = $facebook->api('/me/feed', 'post', array('message'=>'Hello World!'));
} else {
    // We don't have the permission
    // Alert the user or ask for the permission!
    header( "Location: " . $facebook->getLoginUrl(array("scope" => "publish_actions")) );
}
?>
    <!DOCTYPE html>
    <html xmlns:fb="">
    <head>

      <style type="text/css">
      li{ 
        vertical-align: middle;
        padding-top: 1em; 
      }
    </style>
    <div id="fb-root"></div>
      <script type="text/javascript" src="/javascript/jquery-1.7.1.min.js"></script>
     <script type="text/javascript">

      (function(d, debug){
         var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
         if (d.getElementById(id)) {return;}
         js = d.createElement('script'); js.id = id; js.async = true;
         js.src = "//connect.facebook/en_US/all" + (debug ? "/debug" : "") + ".js";
         ref.parentNode.insertBefore(js, ref);
       }(document, false)); //loads javascript-sdk

        $(function() {
          // Set up so we handle click on the buttons
          $('#like_but').click(function(){
          FB.api(
      'me/og.likes',
      'post',
      {
        object: ""
      },
      function(response) {
        alert(response);
      });});}); // they are closed properly, don't bother checking it. (!) Should like the 'object'
     </script>
    </head>
    <body> 
    <div style="position:fixed; display:block">
      <input type="button" value="Like" id="like_but"/>
 </div>    
</body>
</html>

Does anyone have any idea why does the error appear or how can I solve this? Any hint would be appreciated.

Note: the user logs in from another index.php, but I won't post it here, because there is no problem with it, and the access token is still gathered in utils.php. Also when checking if permissions are granted in "likes.php", it works fine.

I have defined an access token and have the required permissions to 'like' a facebook page, but firebug keeps giving me the error in the title. Please don't mark this post as duplicate, because I've looked on the posts regarding the problem and I couldn't find an answer that would fit my particular case in any way. I can't understand why or how should I solve it. My code is the following:

utils.php

    <?php
require_once('sdk/src/facebook.php');
require_once("AppInfo.php");
/**
 * @return the value at $index in $array or $default if $index is not set.
 */
function idx(array $array, $key, $default = null) {
  return array_key_exists($key, $array) ? $array[$key] : $default;
}

function he($str) {
  return htmlentities($str, ENT_QUOTES, "UTF-8");
}
$facebook = new Facebook(array(
'appId'  => AppInfo::appID(),
'secret' => AppInfo::appSecret(),
'sharedSession' => true,
'trustForwarded' => true,
'file_upload' =>true
));
$user_id = $facebook->getUser();
if($user_id)
{
  $logoutUrl =$facebook->getLogoutUrl();
}
  else
  {
      $loginUrl=$facebook->getLoginUrl();
  }
if ($user_id) {
try {
  // Fetch the viewer's basic information
  $user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
  // If the call fails we check if we still have a user. The user will be
  // cleared if the error is because of an invalid accesstoken
  if (!$facebook->getUser()) {
    header('Location: '. AppInfo::getUrl($_SERVER['REQUEST_URI']));
    exit();
  }
}
}
?>

likes.php

      <?php

require_once("sdk/src/facebook.php"); 
require_once("utils.php");
require_once("AppInfo.php");
$permissions = $facebook->api('/me/permissions    ');
if( array_key_exists('publish_actions', $permissions['data'][0]) ) {
    // Permission is granted!
    // Do the related task
    //$post_id = $facebook->api('/me/feed', 'post', array('message'=>'Hello World!'));
} else {
    // We don't have the permission
    // Alert the user or ask for the permission!
    header( "Location: " . $facebook->getLoginUrl(array("scope" => "publish_actions")) );
}
?>
    <!DOCTYPE html>
    <html xmlns:fb="http://ogp.me/ns/fb#">
    <head>

      <style type="text/css">
      li{ 
        vertical-align: middle;
        padding-top: 1em; 
      }
    </style>
    <div id="fb-root"></div>
      <script type="text/javascript" src="/javascript/jquery-1.7.1.min.js"></script>
     <script type="text/javascript">

      (function(d, debug){
         var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
         if (d.getElementById(id)) {return;}
         js = d.createElement('script'); js.id = id; js.async = true;
         js.src = "//connect.facebook/en_US/all" + (debug ? "/debug" : "") + ".js";
         ref.parentNode.insertBefore(js, ref);
       }(document, false)); //loads javascript-sdk

        $(function() {
          // Set up so we handle click on the buttons
          $('#like_but').click(function(){
          FB.api(
      'me/og.likes',
      'post',
      {
        object: "http://facebook./216730015024772"
      },
      function(response) {
        alert(response);
      });});}); // they are closed properly, don't bother checking it. (!) Should like the 'object'
     </script>
    </head>
    <body> 
    <div style="position:fixed; display:block">
      <input type="button" value="Like" id="like_but"/>
 </div>    
</body>
</html>

Does anyone have any idea why does the error appear or how can I solve this? Any hint would be appreciated.

Note: the user logs in from another index.php, but I won't post it here, because there is no problem with it, and the access token is still gathered in utils.php. Also when checking if permissions are granted in "likes.php", it works fine.

Share Improve this question edited Mar 17, 2013 at 20:49 Julian H. Lam 26.1k13 gold badges50 silver badges74 bronze badges asked Mar 7, 2013 at 20:41 MihaiBMihaiB 1391 gold badge4 silver badges17 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 8 +100

Assuming that the access_token you received from Facebook is indeed valid... it looks like your implementation of the Facebook javascript SDK isn't plete.

You've included the library loader, but you don't have an FB.init(); section to initialize the library. I see no reference to any appId in the second code block, so there's way for Facebook to know what app your code is in reference to.

Please refer to the following documentation from Facebook.

Specifically, this may solve your problem:

window.fbAsyncInit = function() {
    // init the FB JS SDK
    FB.init({
        appId      : 'YOUR_APP_ID', // App ID from the App Dashboard
        channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File for x-domain munication
        status     : true, // check the login status upon init?
        cookie     : true, // set sessions cookies to allow your server to access the session?
        xfbml      : true  // parse XFBML tags on this page?
    });

    // Additional initialization code such as adding Event Listeners goes here
    document.getElementById('like_but').addEventListener('click', function() {
        FB.api('me/og.likes', 'post', {
            object: "http://facebook./216730015024772"
        }, function(response) {
            console.log(response);
        });
    }, false);
};

(function(d, debug){
    var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
    if (d.getElementById(id)) {return;}
    js = d.createElement('script'); js.id = id; js.async = true;
    js.src = "//connect.facebook/en_US/all" + (debug ? "/debug" : "") + ".js";
    ref.parentNode.insertBefore(js, ref);
}(document, /*debug*/ false));

本文标签: