我已经成功地创造了一个facebook信使机器人。我也在我的应用程序中实现了消息回发,在我的安卓设备(Messenger V 68.0.0.22.67)中,它似乎运行得很好。
但当我尝试使用三星Galaxy S5和信使V 76.0.0.13.70时,所有事件postback都被称为三次事件。我甚至尝试和其他一些现有的facebook机器人一起在同一个设备上测试回发事件,情况也是一样的。每次回发我都会得到三次回复。
这可能是信使版本的问题吗?到目前为止,我还没有找到任何与此相关的问题日志。
任何帮助都将不胜感激。
发布于 2017-05-15 12:12:31
当Facebook在报头中发回的签名与您计算的有效负载签名不匹配时,就会发生这种情况。这将返回一个500到Facebook和Facebook重试这个请求两次(总共三个请求)。
问题
问题是有些字符必须对UNICODE进行编码。
例如:
在计算散列之前,必须将@字符替换为“\u 0040”。
溶液
我只是在模块的verifySignature中完成了这一工作。
let hash = crypto.createHmac('sha1',this.APP_SECRET).update(JSON.stringify(req.body).replace(/@/g,"\\u0040").replace(/\//g, '\\/')).digest('hex');
本文将深入探讨解决方案。
https://hackernoon.com/regenerating-a-raw-request-payload-an-impossible-task-e4133fb2571
https://stackoverflow.com/questions/38046794
复制相似问题