因此,我正在构建一个新的应用程序,使用Javascript API登录(v2.4)和最新版本的PHP (v5)。我为它创建了一个测试应用程序,并正在使用它。使用Javascript API,我进行登录和身份验证,并保存从getLoginStatus返回的访问令牌:
FB.getLoginStatus(function(response) {
handleLoginStatusChange(response);
});
function handleLoginStatusChange(response)
{
. . .
else if (response.status == 'connected')
{
// make ajax call to save access token
. . .
}然后,在我的PHP代码中,我获得了这个访问令牌,并尝试使用它。我还计算了一个appsecret_proof:
$this->fb = new Facebook\Facebook([
'app_id' => <my app id>,
'app_secret'=> <my app secret>,
'default_graph_version' => 'v2.3'
]);
$this->fbApp = new Facebook\FacebookApp( <my app id>,
<my app secret );
$appsecret_proof = hash_hmac('sha256', <access token>,
<app secret>); 然后我试着发布一个链接到我的FB帐户:
$linkData = [
'link' => 'https://google.com',
'message' => 'This is a test post',
];
$response = $this->fb->post('/me/feed', $linkData, <access token>);这给了我一个可怕的“appsecret_proof参数中提供的无效API”错误。我不知道这是否是问题所在,但是如果我将访问令牌放到调试器中,它会告诉我这个访问令牌是针对我的实际应用程序的,而不是我的测试应用程序,所以appID不匹配。我不认为这是一个问题,如果我理解测试应用程序,特别是因为我在这段代码中一直在使用测试appID和测试appSecret。
有什么想法吗?我在StackOverflow上看到了一些东西,但它们要么是旧版本的API,要么是谈论编辑API代码本身来禁用这些东西。
发布于 2015-09-17 04:08:26
它告诉我此访问令牌适用于我的实际应用程序,而不是我的测试应用程序,因此appID不匹配
这就是它不起作用的原因。
想一想Facebook方面发生了什么:他们需要用来计算应用秘密证明的应用秘密,所以他们必须通过应用id来查找。他们是从哪里得到应用id的?从访问令牌…好了!
因此,如果您为不同的应用程序传递访问令牌,这将使他们使用错误的应用程序秘密来计算应用程序-秘密证明-因此它将与您发送的值不匹配。
您需要使用属于您的测试应用程序的访问令牌。
( PHP SDK自己负责计算和发送应用程序的秘密证明,您不需要手动处理。)
https://stackoverflow.com/questions/32614801
复制相似问题