人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

facebookファンゲートを作っていますが、'signed_request'が取得できず困っています。
以下のページを参考に作っています。
http://phpjavascriptroom.com/?t=topic&p=facebookpage_liked
http://websae.net/facebook_fangate_20130310/

サンプルソースindex.phpの<?php直下に
print_r($_REQUEST['signed_request']);
を挿入しますが何も入っていません。

ネットで検索してみましたが、facebookページタブからiframeアプリを実行すると'signed_request'がpostされるよ・・・という記事しか見つけることができませんでした。
どなたか'signed_request'が取得できない理由を心当たりの方、よろしくお願いしますm(_ _)m


前回の質問は以下です。
http://q.hatena.ne.jp/1374896272
ファンゲート以外は一通り動き、ユーザーデータMySQL格納まで動作確認していますので初期設定とかの問題ではない気がします。
PHPバージョン5.2.17です。
よろしくお願いします。

●質問者: Bar BILBAO
●カテゴリ:ウェブ制作
○ 状態 :キャンセル
└ 回答数 : 2/2件

▽最新の回答へ

1 ● だわかき

Facebook開発者でiframeアプリを登録しましたか。
ご確認下さい。
登録手順は下記のブログをご覧下さい。
http://weboook.blog22.fc2.com/blog-entry-309.html


Bar BILBAOさんのコメント
回答ありがとうございます。 示していただいたURLを念入りに見てみましたが、私の示した参考URLとの差異を見つけることができません。 具体的にどの部分でしょうか? https://developers.facebook.com/docs/appsonfacebook/pagetabs/ でしたら済ませています。

だわかきさんのコメント
Facebook開発者でiframeアプリを登録しましたか?

2 ● holoholobird

まず
>どなたか'signed_request'が取得できない理由を心当たりの方、よろしくお願いしますm(_ _)m

とのことですが、signed_requestに関して以下の情報に目を通しておいてください。

Facebookアプリが Authentication するためには、 FacebookからPOSTされるSigned Requestの処理が大事なのですが、今作っているCanvasアプリでちょっとはまってしまいました。Signed RequestがFacebookからPOSTされるタイミングは次の5パターンです。

A signed_request parameter is POSTed to an application when the app is loaded inside a Canvas page. For example, at https://apps.facebook.com/YOUR_APP_NAMESPACE/.
A signed_request parameter is POSTed to an application when the app is loaded inside a Page Tab.
If an app has registered a Deauthorized Callback URL in it’s settings, a signed_request parameter will be POSTed to that URL whenever a user deauthorizes that application in their account settings.
A signed_request parameter is passed to an app which is using the Registration Plugin whenever a user successfully registers.
When using the JS SDK for authentication, the authResponse object contains a signed_request property which is used to transfer information about the authenticated user.

Signed Request

それぞれのケースでSigned Requestが含む情報は若干異なるようです。

Canvas pageアプリの場合は、最初にロードされるタイミングのみです。次のページ等に遷移した場合には、Signed RequestはPOSTされないので、パースしたaccess_tokenなどはsessionに入れておくなどして保存しておく必要があります。

話は変わりますが、今作っているFacebookアプリがもうすぐできるのですが、現段階で一つのアプリとしてリリースするか、もっと機能を付け加えてからリリースするかで迷っています。現段階ではシンプルというか、でっ?て感じなのでもう少し機能を加えたいけど、これはこれで一つのアプリとしてリリースしておきたいとも思っています。
https://developers.facebook.com/docs/facebook-login/using-login-with-games/
http://e-port.co.jp/blog/facebook/70/

英語部分はもし読めなければ、その旨言っていただければ翻訳いたします。

上記の情報をヒントに試みても解決することが困難だった場合、お手数ですが

サンプルソースindex.phpの
print_r($_REQUEST['signed_request']);
を挿入しますが何も入っていません。

で出てきている挿入後のサンプルソースをコメント欄にすべて貼り付けてください。


Bar BILBAOさんのコメント
ご回答ありがとうございます。 いろいろ試しており返答が遅くなりました。 Google翻訳と他の翻訳ソフトを合わせたレベルですが、一応理解しているつもりです。 ですが未だ'signed_request'が取得できずにいます。 以下ソースは'signed_request'が取れているか?だけに焦点を絞ったindex.phpファイルです。 facebookページに表示されたタブをクリックすると、facebookのiframeにindex.phpが表示されます。 config.inc.phpは_FB_APPIDや_FB_SECRETなどを定義しています。 SDK関数を利用した方法と、直接postされたパラメーターを表示しようと試みています。 'check01?03'は命令が通過しているか確認のためのものです。 定数で定義された値は、コピペで行っていますし、何度も間違いがないことを確認しました。 また、2度ほど新しくアプリを作り直したりしてテストしていますので、当方はもちろんfacebook側のイレギュラーも考えにくいです。 もう手詰まり状態です。 よろしくお願いします。 >|html| <?php //$ua = $_SERVER['HTTP_USER_AGENT']; // IEのcookieを許可する //if (strpos($ua, 'MSIE') !== FALSE) { //header('p3p: CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"'); //} $documentroot = dirname( __FILE__) . '/'; require_once $documentroot . 'php_libs/config/config.inc.php'; require_once 'facebook/php/scr/facebook.php'; $facebook = new Facebook(array( 'appId' => _FB_APPID, 'secret' => _FB_SECRET, 'cookie' => true )); $signed_request = $facebook->getSignedRequest(); $like_status = $signed_request["page"]["liked"]; print_r($_POST['signed_request']); print_r("<br />"); print_r("check 01"); print_r("<br />"); print_r($signed_request); print_r("<br />"); print_r("check 02"); print_r("<br />"); print_r($like_status); print_r("<br />"); print_r("check 03"); print_r("<br />"); ?> <!doctype html> <html xmlns:fb="http://www.facebook.com/2008/fbml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>こんにちは♪</title> </head> <body> <h1>こんにちは♪</h1> </body> </html> ||<

Bar BILBAOさんのコメント
追記です。 以下で生成されたURLを踏んでアプリの許可は得ています。 >|| $params = array( 'client_id'=> _FB_APPID, 'redirect_uri'=> _FB_CANVASURL .'redirect.php', 'state'=> $_SESSION['state'], 'scope'=> 'read_stream, email, user_birthday, publish_actions, read_friendlists', ); $url = "https://www.facebook.com/dialog/oauth?". http_build_query($params); ||<
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ