2014-01-07 73 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