-1

以下のオープングラフ呼び出しのコードの何が問題なのか教えてください。

私は app token 、 user token 、および応答するたびにトークンなしで試しました

{"エラー":{"メッセージ":"アクティブなアクセス トークンを使用して、現在のユーザーに関する情報を照会する必要があります。","type":"OAuthException","code":2500}}

アプリ トークン、ユーザー トークン、およびコードを fb デバッガーで検証しました

<?php
$appId = '****************';
$appSecret = '*************************';
$appNameSpace = 'og_loctest';

$token_url =    "https://graph.facebook.com/oauth/access_token?" .
        "client_id=" . $appId .
        "&client_secret=" . $appSecret .
        "&grant_type=client_credentials";
$response = file_get_contents($token_url);

$params = null;
parse_str($response, $params);
$access_token = $params['access_token'];
?>

<html xmlns:og="http://ogp.me/ns" xmlns:fb="http://www.facebook.com/2008/fbml" lang="en">
<head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# og_loctest: http://ogp.me/ns/fb/og_loctest#">
  <meta property="fb:app_id" content="<?php echo $appId;?>" /> 
  <meta property="og:type"   content="og_loctest:properties" /> 
  <meta property="og:url"    content="http://nirav-metronew.kwetoo.com/fbtest/" /> 
  <meta property="og:title"  content="Sample Properties" /> 
  <meta property="og:image"  content="https://s-static.ak.fbcdn.net/images/devsite/attachment_blank.png" />
  <title>OG Tutorial App</title>
</head>
<body>
  <div id="fb-root"></div>
  <script>
    window.fbAsyncInit = function() {
      FB.init({
        appId      : "<?php echo $appId;?>",
        status: true,
        cookie: true,
        xfbml: true,
        frictionlessRequests: true,
        useCachedDialogs: true,
        oauth: true
      });
    };

    // Load the SDK Asynchronously
    (function(d){
      var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
      js = d.createElement('script'); js.id = id; js.async = true;
      js.src = "//connect.facebook.net/en_US/all.js";
      d.getElementsByTagName('head')[0].appendChild(js);
    }(document));

    function fblogin()
    {
         FB.login(function(response) {
           if (response.authResponse) {
             postProperties();
           }
         },{scope: 'email,offline_access,publish_stream,publish_actions'});
    }

      function postProperties()
      {

          FB.api(
            '/me/og_loctest:post',
            'post',
            { properties: 'http://nirav-metronew.kwetoo.com/fbtest/',access_token:"<?php echo $access_token;?>"},
            function(response) {
               if (!response || response.error) {
                  alert('Error occured');
               } else {
                  alert('Facebook open graph tested! Action ID: ' + response.id);
               }
            });
      }  
  </script>
</head>
<body>
  <form>
    <input type="button" value="Post properties" onclick="fblogin()" />
  </form>
</body>
</html>
4

1 に答える 1

1

以下のオープングラフ呼び出しのコードの何が問題になっているのか、誰か教えてもらえますか?

スクリプトロジックに欠陥があります。これは、クライアント側で何が起こっているのか、サーバー側で何が起こっているのか、いつなのかを混乱させたためです。

      FB.api(
        '/me/og_loctest:post',
        'post',
        { properties: 'http://nirav-metronew.kwetoo.com/fbtest/',
          access_token:"<?php echo $access_token;?>"},

FB.loginのコールバックで、このクライアント側を呼び出しています。ユーザーがログインしたばかりの場合、サーバー上ですでに実行されているPHPには、クライアント側のログインにつながった現在のアクセストークンを知る方法がありません。PHPは将来を見通すことができません…したがって、最終的にこの場所に出されるものは何であれ、それは間違いなくあなたが思っている現在のアクセストークンではありません。

ただし、JS SDKは、アクセストークン自体を完全に処理できるため、このAPI呼び出しにパラメーターとして明示的に渡す必要はありません。パーツaccess_token:"…"を完全に削除するだけです。

于 2012-08-14T08:34:13.127 に答える