2

アクセス トークンを定義し、Facebook ページを「いいね」するために必要な権限を持っていますが、firebug がタイトルにエラーを表示し続けます。この投稿を重複としてマークしないでください。問題に関する投稿を調べましたが、私の特定のケースに適合する回答が見つからなかったからです。なぜ、どのように解決すればよいのかわかりません。私のコードは次のとおりです。

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.net/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.com/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>

なぜエラーが表示されるのか、またはどうすればこれを解決できるのか、誰にも分かりますか? ヒントをいただければ幸いです。

注: ユーザーは別の index.php からログインしますが、問題はなく、アクセス トークンはまだ utils.php に収集されているため、ここには投稿しません。また、「likes.php」で権限が付与されているかどうかを確認すると、正常に動作します。

4

1 に答える 1

8

Facebookから受け取ったものが実際に有効であると仮定するとaccess_token...FacebookjavascriptSDKの実装は完了していないようです。

FB.init();ライブラリローダーを含めましたが、ライブラリを初期化するセクションがありません。2番目のコードブロックには何も参照されていないappIdため、Facebookがコードが参照しているアプリを知る方法があります。

Facebookの次のドキュメントを参照してください。

具体的には、これで問題が解決する場合があります。

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 communication
        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.com/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.net/en_US/all" + (debug ? "/debug" : "") + ".js";
    ref.parentNode.insertBefore(js, ref);
}(document, /*debug*/ false));
于 2013-03-17T20:37:51.443 に答える