2013-11-10 125 views
1

那麼我一直在試圖使appsecret_proof工作。API參數中提供的appsecret_proof無效

我已經在應用程序設置中啓用了app_secret。

在PHP SDK生成的應用程序的祕密代碼

$appsecret_proof= hash_hmac('sha256', APP_ID. "|" . APP_SECRET, APP_SECRET); 

,我通過它與之後的參數一起在批處理請求

$params['batch'] = json_encode($entries); 
$params['appsecret_proof'] = $appsecret_proof; 
$response = $facebook->api('/', "POST", $params); 

,我有交叉檢查應用程序ID和應用祕密。

使用這些設置我得到以下錯誤。在API參數

任何幫助提供

無效appsecret_proof將不勝感激。

P.S在應用程序設置中禁用它使其工作。

回答

3

如果使用用戶在一個或多個子請求中訪問令牌,那些請求將需要他們自己的appsecret_proof。否則,Facebook將比較用戶的訪問令牌和應用令牌的證明,並且檢查將失敗。

例如:

$proof1 = hash_hmac('sha256', [USER TOKEN 1], APP_SECRET); 
$proof2 = hash_hmac('sha256', [USER TOKEN 2], APP_SECRET); 


$requests = array(
    array(
     'relative_url' => "[USER ID 1]/permissions", 
     'method' => "GET", 
     'body' => "access_token=[USER TOKEN 1]&appsecret_proof=" . $proof1 
    ), 
    array(
     'relative_url' => "[USER ID 2]/permissions", 
     'method' => "GET", 
     'body' => "access_token=[USER TOKEN 2]&appsecret_proof=" . $proof2 
    ), 
); 


$appToken = APP_ID. "|" . APP_SECRET; 
$appsecret_proof= hash_hmac('sha256', appToken, APP_SECRET); 
$params['batch'] = json_encode($requests); 
$params['appsecret_proof'] = $appsecret_proof; 
$response = $facebook->api('/', "POST", $params); 
+0

完全起作用。你搖滾。 – bowheart