无效的appsecret_proof -为什么
Invalid appsecret_proof - why?
所以,我正在构建一个新的应用程序,使用Javascript API登录(v2.4)和PHP API的最新版本(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代码本身来禁用这些东西。
它告诉我这个访问令牌是针对实际应用的,而不是测试应用的,所以appID不匹配
这就是为什么它不起作用。
想想Facebook这边发生了什么:他们需要用于计算应用秘密证明的应用秘密,所以他们必须通过应用id来查找。他们从哪里获得应用id ?从访问令牌…!
所以如果你传递一个访问令牌给一个不同的应用程序,这将使他们使用错误的应用程序的秘密来计算应用程序的秘密证明-所以它不会匹配你发送的值。
你需要使用一个属于测试应用的访问令牌。
(PHP SDK负责计算和发送应用程序的秘密证明,你不需要手动处理。)
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 为什么“;未定义的“;在JavaScript中结束循环
- 为什么这在IE中的工作方式与在Firefox中不同
- 知道为什么我的旋转木马不会自动更改图片吗
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 为什么在变形之前不缺少Fx
- 为什么JavaScript在for循环为3时向所有4发出警报
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- 为什么Airbnb风格指南说不鼓励依赖函数名称推断
- 为什么要使用0>javascript中的0
- 为什么无法在TypeScript中导出类实例
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 为什么我的d3.jsselectAll+过滤器没有过滤
- 为什么HTML5拖放的目标是孩子?(可排序列表)
- 为什么忽略了eval()代码中的语法错误
- 为什么在画布上画线;t出现
- 为什么js事件消失了
- 为什么元素的宽度在页面加载之后和那一刻之后不同
- 为什么不'在JQuery中找到第二个css选择器的工作