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です。
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/08/04 09:34:22
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:dawakaki No.1

回答回数797ベストアンサー獲得回数122

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

id:bilbao-jp

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

2013/07/30 17:23:22
id:dawakaki

Facebook開発者でiframeアプリを登録しましたか?

2013/07/31 06:40:31
id:holoholobird No.2

回答回数574ベストアンサー獲得回数104

まず
>どなたか'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']);
を挿入しますが何も入っていません。

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

id:bilbao-jp

ご回答ありがとうございます。
いろいろ試しており返答が遅くなりました。
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側のイレギュラーも考えにくいです。
もう手詰まり状態です。
よろしくお願いします。

<?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>
2013/07/31 12:58:33
id:bilbao-jp

追記です。
以下で生成された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);
2013/07/31 19:54:54
  • id:kamicup
    リダイレクトしちゃってる(POST→301 Redirect→GETの過程でPOSTの中身は落ちちゃう)んじゃないかな

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません