2014-01-07 71 views
3

我已經在我的Facebook帳戶中創建了一個應用程序,並使用我的訪問令牌(php)完成了發佈給我的朋友。API參數中提供的appsecret_proof無效

但是用我的應用程序ID和祕密,並得到錯誤的其他用戶不能張貼到他們的朋友

在API參數提供

無效appsecret_proof

我已經停用

在我的應用程序設置中所需的應用程序祕密證明

有什麼解決辦法嗎?

public function facebookUsershare() { 
require '../facebook/src/facebook.php'; $facebook = new Facebook(array('appId' => 'app  id', 'secret' => 'secret_key',)); 

$privacy = array('description' => 'Vladimir Sergeevich', 'value' => 'CUSTOM', 'friends' =>'friend id' 'allow' => 'loged in user'); 
try { 
$result = $facebook->api('/me/feed', 'POST', array("access_token" => 'access_token', 'picture' => "path to image", 'link' => "gmail.com";, 'name' => "Go wi6 7", 'caption' => "capn", 'privacy' => json_encode($privacy))); 

echo 'Successfully posted to Facebook Personal Profile'; //return $facebookfrndids; } catch(Exception $e) { 
echo $e->getMessage(); 
return false; } 
+0

你的代碼在哪裏? – Raptor

+0

你應該編輯你的問題,而不是在評論中張貼代碼。 – Raptor

回答

5

我終於得到了答案.... 禁用所需的應用程序在應用程序的高級設置祕密的證明,並在base_facebook.php SDK

if (isset($params['access_token'])) { 
    $params['appsecret_proof'] = $this->getAppSecretProof($params['access_token']); 
} 
+2

你不應該這樣做。更新你的PHP SDK文件。 – astroanu

+5

從SDK v4.0.11開始,您可以使用'FacebookSession :: enableAppSecretProof(false);'來控制此 –

+0

您可以使用FacebookSession :: enableAppSecretProof(false);或者您在Facebook應用程序控制臺中打開需要應用程序祕密證明。只要您在您的Web服務器中正確設置您的Facebook應用程序密碼,您在使用官方Facebook SDK時無需執行任何操作。 – cwhsu

1

至於documentation註釋下面的代碼:

圖形API調用可以從客戶端或服務器上的客戶端的代表 進行。通過添加名爲appsecret_proof的 參數,可以更好地保護來自服務器的呼叫。

所以你需要指定其他PARAM appsecret_proof togather與access_tokenappsecret_proofaccess_token的數字簽名,用您的應用祕密簽名。簽名需要確認access_token。爲了得到appsecret_proof你需要計算這樣的簽名:

secret = 'app secret' 
token = 'access token' 
digest = OpenSSL::Digest.new('sha256') 
proof = OpenSSL::HMAC.digest(digest, secret, token) 

# result params: 
"access_token=#{token}&appsecret_proof=#{proof}" 

的例子是Ruby語言,但是這不是語言的問題。請參閱您的語言手冊以參考hmac簽名api。

+0

我想通過這個'appsecret_proof'。我使用PHP。 – software

+0

在請求正文中使用access_token加入 – oklas