1

ゲームをFacebookに統合するのに問題があります。ドキュメントについて読んだとき、FlashからFBと通信するための最良かつ最新の方法は、javascriptのFacebookAPIを使用することであると読みました。これを呼び出して、すべてのUIダイアログと基本的なログイン情報を取得します。今、私のフラッシュゲームはphpに接続して、次のようなハイスコアを送受信します。

score.php?action = NEWSCORE&userId = 123123123&score = 100

score.php?action = VIEW

score.php?action = VIEWFRIENDS&userId = 123123123

ここで、scores.phpで、VIEWFRIENDSアクションを設定するときに、phpでFacebookクエリを作成する必要があります。私はこれを追加して行います

// Init the Facebook SDK
$facebook = new Facebook(array(
'appId'  => $app_id,
'secret' => $app_secret,
));

// Get the current user
$user = $facebook->getUser();

$access_token = $facebook->getAccessToken();
$fbresponse = $facebook->api("/me/friends?fields=installed", array('access_token'=>$access_token.$access_token,));

if ($fbresponse)
{
    $friendsData = $fbresponse['data'];
    $friendsString = '';
    $friendCount = 0;
    for ($i = 0; $i < sizeof($friendsData); $i++)
    {
        $friend = $friendsData[$i];

        if ($friend['installed'])
        {
            if ($friendCount > 0)
                $friendsString = $friendsString . ",";

            $friendsString = $friendsString . "'" . $friend['id'] . "'";                    $friendCount++;
        }
    }
    // Get the friends highscores
    $sql = "SELECT * FROM Highscores WHERE FacebookId IN (" . $friendsString . ") ORDER BY Score DESC LIMIT " . $scoresize ;
    $result = mysql_query($sql);
}

これを行う場合、Facebookの外部でテストするとすべてが機能するように見えますが、アプリに統合すると、次のエラーがスローされます。

<br />
<b>Fatal error</b>:  Uncaught OAuthException: Invalid access token signature.
  thrown in <b>/home/public_html/mysite.org/games/myGameFacebook/fb-php-sdk/base_facebook.php</b>

1106行目

私は何が起こっているのかをチェックしようとしていますが、それについて何をすべきかまだわかりません。このコードでログインすると、アクセストークンがJavascriptで生成されることを理解しています。

getLoginStatus:function() {
    log("getLoginStatus");
    FB.getLoginStatus(function(response) {
        if (response.status === 'connected') {

            log("Logged in.");
            F.token = response.authResponse.accessToken;
            F.getCurrentUserInfo();
        } else if (response.status === 'not_authorized') {
            log("User did not authorize app");
        } else {
            log("Not logged in.");
            FB.login(function(response) {
                if(response.session) {
                    log("Logging successful.");
                    F.token = response.session.access_token;
                    F.getCurrentUserInfo();
                } else {
                    log("Logging failed.");
                }
            });
        }
    });
},

この問題を解決するにはどうすればよいですか?私はそれを行う方法を理解しようとしてきましたが、それが不可能であるか、または機能しなかった未知のセッション変数へのリンクを読んだことがあります。

4

1 に答える 1

0

$facebook->api への呼び出しで、アクセストークンをそれ自体と連結しています

array('access_token'=>$access_token.$access_token,)

次のようになります。

array('access_token'=>$access_token,)

しかし、次のような関数を使用して、必要なものを取得するためにアプリ アクセス トークンを使用する必要があると思います。

 // Helper function to get an APP ACCESS TOKEN
 function get_app_access_token($app_id, $app_secret) {
   $token_url = 'https://graph.facebook.com/oauth/access_token?'
     . 'client_id=' . $app_id
     . '&client_secret=' . $app_secret
     . '&grant_type=client_credentials';

   $token_response =file_get_contents($token_url);
   $params = null;
   parse_str($token_response, $params);
   return  $params['access_token'];
 }

Facebook 開発者アプリ ページで読み取ることができるアプリ シークレットを渡す必要があります。

于 2012-07-04T23:36:43.253 に答える