Facebookページのファンゲートの作り方
FacebookページのWelcomeページにファンゲートを作ってみたので、その手順のメモです。
最初にアクセスするWelcomeページのindex.phpにて、いいねを押してくれている人は”fan.php”を表示し、まだいいねを押していない人には”not-fan.php”を表示するという分岐をするしくみになっています。
手順
まず”signed_request.php”という名前のファイルを作り、下記のように記入します。
訪問者がファンかファンでないかを判断する処理が書かれています。Facebookでコードが公開されていますのでコピー&ペーストしました。Signed Request – Facebook開発者
<?php
function parse_signed_request($signed_request, $secret) {
list($encoded_sig, $payload) = explode(‘.’, $signed_request, 2);
// decode the data
$sig = base64_url_decode($encoded_sig);
$data = json_decode(base64_url_decode($payload), true);
if (strtoupper($data['algorithm']) !== ‘HMAC-SHA256′) {
error_log(‘Unknown algorithm. Expected HMAC-SHA256′);
return null;
}
// check sig
$expected_sig = hash_hmac(‘sha256′, $payload, $secret, $raw = true);
if ($sig !== $expected_sig) {
error_log(‘Bad Signed JSON signature!’);
return null;
}
return $data;
}
function base64_url_decode($input) {
return base64_decode(strtr($input, ‘-_’, ‘+/’));
}
?>
index.phpには以下のように記入します。
<?php
include ‘signed_request.php';
if (isset($_POST['signed_request']) ) {
$fb_data = parse_signed_request($_POST['signed_request'], ‘アプリの秘訣’);
if ($fb_data) {
if( $fb_data['page']['liked'] ){
//いいねを押している人に表示するページを指定
include ‘fan.php';
}
else {
//いいねを押していない人に表示するページを指定
include ‘not-fan.php';
}
}
}
?>
2行目の”include ‘signed_request.php’;”でsigned_request.phpファイルを読み込んで、いいねを押してくれてる人かそうでないかを判断します。
4行目に出てくる”アプリの秘訣”はFacebookの”Facebook開発者”の右の方にあるコードです。

8行目 のinclude ‘fan.php’;でいいねを押してくれている人は”fan.php”を読み込みます。
12行目のinclude ‘not-fan.php’;でいいねを押していない人は”not-fan.php”を読み込みます。
私はさくらサーバーを使用しているのでfan.phpとphpの拡張子ですが、fan.phpとnot-fan.phpは普通にhtmlで大丈夫です。文字化けしてしまうので、ファイルの文字コードはUTF-8にします。
fan.phpとnot-fan.phpはhtmlでいいね押してくれた人用とそうでない人用のページを作ります。
もっと難しいかと思っていましたが案外サクっとできました。
色んな意味でもっと簡単な作り方があります。
http://okwave.jp/qa/q7139291.html
色んなアプリがあるのですね。作り方も色々ですね。