2014-01-09 53 views
0

我如何識別我的Facebook應用程序是在Facebook畫布內還是在畫布外部運行(因爲我們訪問www.example.com這樣的網站)。識別Facebook應用程序是否在畫布中

我試圖讓URL住Facebook畫布頁裏面一樣,

echo $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; 

但它返回相同的URL像畫布之外,
我參觀了this鏈接,但我沒有發現任何有用的材料..

請幫忙。

回答

1

看看是否設置了$_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, '-_', '+/')); 
} 

如果你不需要的數據,只是檢查是否已設置。

+0

if(isset($ _ POST ['signed_request']))就像魅力一樣,你是高手! –

0

您的網絡服務器+ PHP腳本不知道它是從iframe中加載的。所以你需要找到一種方法來實現這一點。將畫布應用程序URL提供給Facebook時,您可以向URL查詢字符串添加參數。像:

www.example.com/?from=facebook 

然後在你的PHP腳本,你可以檢查,如果該請求是從FB通過訪問來:

$ _GET [ '從'];

相關問題