我如何識別我的Facebook應用程序是在Facebook畫布內還是在畫布外部運行(因爲我們訪問www.example.com這樣的網站)。識別Facebook應用程序是否在畫布中
我試圖讓URL住Facebook畫布頁裏面一樣,
echo $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
但它返回相同的URL像畫布之外,
我參觀了this鏈接,但我沒有發現任何有用的材料..
請幫忙。
我如何識別我的Facebook應用程序是在Facebook畫布內還是在畫布外部運行(因爲我們訪問www.example.com這樣的網站)。識別Facebook應用程序是否在畫布中
我試圖讓URL住Facebook畫布頁裏面一樣,
echo $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
但它返回相同的URL像畫布之外,
我參觀了this鏈接,但我沒有發現任何有用的材料..
請幫忙。
看看是否設置了$_POST['signed_request']
。當您的應用程序URL在畫布內或頁面選項卡內請求時,Facebook將簽名的請求POST參數發送到服務器。當它沒有設置時,你可以確信應用程序在Facebook之外運行。
您可以用下面的代碼進行解碼$_POST['signed_request']
,如果你需要得到一些data it contains的:
function parse_signed_request($signed_request) {
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$secret = "appsecret"; // Use your app secret here
// decode the data
$sig = base64_url_decode($encoded_sig);
$data = json_decode(base64_url_decode($payload), true);
// confirm the signature
$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, '-_', '+/'));
}
如果你不需要的數據,只是檢查是否已設置。
您的網絡服務器+ PHP腳本不知道它是從iframe中加載的。所以你需要找到一種方法來實現這一點。將畫布應用程序URL提供給Facebook時,您可以向URL查詢字符串添加參數。像:
www.example.com/?from=facebook
然後在你的PHP腳本,你可以檢查,如果該請求是從FB通過訪問來:
$ _GET [ '從'];
if(isset($ _ POST ['signed_request']))就像魅力一樣,你是高手! –