因此,我正在使用我的選項卡上的iFrame,我正在做一個「像路障」,其中用戶需要喜歡頁面以查看祕密內容。有沒有更好,更無縫的方式來做到這一點,然後必須要求許可?無縫的方式來檢查用戶是否喜歡頁面
我知道使用FBML構建的標籤,他們不要求權限,但我猜這是因爲它不是一個iframe。
謝謝!
因此,我正在使用我的選項卡上的iFrame,我正在做一個「像路障」,其中用戶需要喜歡頁面以查看祕密內容。有沒有更好,更無縫的方式來做到這一點,然後必須要求許可?無縫的方式來檢查用戶是否喜歡頁面
我知道使用FBML構建的標籤,他們不要求權限,但我猜這是因爲它不是一個iframe。
謝謝!
當然你可以!正如documentation提到,Facebook將送你一些額外的細節在signed_request
:
當用戶導航到Facebook的 頁,他們會看到你的頁面標籤 下一個可用的選項卡 位置添加。大體上,頁面標籤頁 的加載方式與「畫布頁面」的 完全相同。當用戶選擇您的頁面選項卡時,您將收到 signed_request參數,其中一個 附加參數頁面。此 參數包含一個ID爲 的ID(當前爲 頁面的頁面ID),管理員(如果用戶是頁面的管理員 )和喜歡(如果用戶 喜歡該頁面)的JSON對象。與Canvas 頁面一樣,在用戶授權您的應用之前,您將不會收到在signed_request中 應用可訪問的所有 用戶信息,直到 用戶授權您的應用。
從我tutorial應該像拍攝代碼:
<?php
if(empty($_REQUEST["signed_request"])) {
// no signed request where found which means
// 1- this page was not accessed through a Facebook page tab
// 2- a redirection was made, so the request is lost
echo "signed_request was not found!";
} else {
$app_secret = "APP_SECRET";
$data = parse_signed_request($_REQUEST["signed_request"], $app_secret);
if (empty($data["page"]["liked"])) {
echo "You are not a fan!";
} else {
echo "Welcome back fan!";
}
}
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, '-_', '+/'));
}
?>
更新的代碼:雖然前面的代碼會工作。我不是檢查請求的有效性。這意味着有人可能會篡改請求並向您發送虛假信息(,如將admin
設置爲true
!)。代碼已根據signed_request
documentation方法更新。
謝謝!我明白了這一點,但我很感激你發佈了答案,以防其他人需要知道。 – John
很棒的答案和教程。 –