2012-02-08 15 views
1

私はページタブのFacebook Appを作成しました。ここではファンであるかどうかに応じて異なるコンテンツを表示したいと思います。 (また、ファンゲート、ランディングページまたはページを明らかにすると呼ばれる)Facebookのsign_requestを受信して​​いないiframe-app

は、このために、私は特定の次のコードでは、PHP SDKを使用しています:

<?php 
require 'src/facebook.php'; 

$facebook = new Facebook(array(
'appId' => 'APP_ID', 
'secret' => 'APP_SECRET', 
'cookie' => true, 
)); 
?> 

とコンテンツ内:

<?php 
$signed_request = $_REQUEST["signed_request"]; 
list($encoded_sig, $payload) = explode('.', $signed_request, 2); 
$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true); 

if (empty($data["page"]["liked"])) {?> 
Thank you for liking our Page! 
    <?php } else { ?> 
You haven't liked our page yet.. 
<?php }; 

    // Debugging Code 

echo "REQUEST:<br>"; 
print_r($_REQUEST); 

echo "<br>GET:<br>"; 
print_r($_GET); 

echo "<br>POST:<br>"; 
print_r($_POST); 
?> 

これは、私がFacebookのユーザーと一緒にログインしているとき、および自分のページで使用しているときに機能します。 意味signed_requestは$ _POSTと$ _REQUESTの両方に存在します。

私は他のユーザーとそれをテストする場合ただし、これらの変数にはsigned_request値がありません。..

注: は - 私はすでにアプリケーションの設定(300リダイレクトとスタッフの私のURLの設定を見ていました)しかし、これはうまく見え、私は私のユーザーと言ったように、それは働いている.. - signed_requestは空ではなく、存在しない。

誰も同じような問題がありますか?

PHPの代わりにJavascript SDKを使用しても問題ありませんが、Javascriptではそれほど経験はありません。

編集:私は分かったとして、あなたは常に非セキュア(HTTP)とセキュア(HTTPS)URLを持っている必要が

。 セキュアURLを標準URLとして入力しても、Facebookはhttpを使用してFacebookに連絡し、httpsにリダイレクトされます(サーバー構成によって異なります)。これにより、signed_requestが失われます。

答えて

2

signed_requestは、GETではなく、POSTとなります。あなたはPHP-SDKを使用しているので$_REQUESTはそれがsigned_request検索のためにそれを使用することをお勧めしますphp.inirequest_orderまたはvariables_order

で構成に従ってデータが含まれています。ページのタブで実行中のアプリケーションの場合

$signed_request = $facebook->getSignedRequest(); 
$liked = $signed_request['page']['liked']; 

signed_request常に渡されますそれで、あなたがそれを確実に得られないならば、POSTのデータが渡されることを省略したリダイレクトはありません。

+0

あなたのクイック返信はThxです。あなたはPOST対GETについて正しいです、私は説明にそれらを混同しました。 – platzhersh

+0

あなたが提案したような行を変更しましたが、それでも同じ効果があります。 私の個人的なアカウントではうまく動作しないため、URLがリダイレクトされないと確信しています。 – platzhersh

+0

@platzhershでは、Chromeで "Developler Tools"(ネットワークタブ)のようなものを使用して、 "signed_request"が "tab canvas"に渡されているかどうかを確認することができます。 –

5

私はちょうど同様の問題がありました。私の場合、問題はアプリの設定では、私は(それのindex.phpで)ディレクトリを参照していたタブのURLの最後にスラッシュを入れていないということでした。だから私は最後にスラッシュと同じURLにリダイレクトを得て、$ _ポストをこの方法で失った。

+0

これに到達するために私の3時間かかった... *一口* –

+0

おかげで、あなたは私の時間を節約...スラッシュに正確な問題を抱えていた – haynar

関連する問題