Facebook Messenger API“网址可能无法保证”

时间:2016-04-12 19:31:49

标签: node.js facebook ssl webhooks facebook-messenger

我正在尝试设置Facebook messenger API,当我尝试添加WebHook时出现此错误:

  

无法验证网址。回调验证失败,出现以下错误:curl_errno = 60; curl_error = SSL证书问题:无法获得本地颁发者证书; HTTP状态代码= 200; HTTP消息=已建立连接

我使用他们在教程中提供的代码设置了我的NodeJS服务器。这是网址:https://stackoverload.me/chatter/webhook

编辑此处的决议(有人想看代码):

var express = require('express');

var fs = require('fs');
var https = require('https');

var app = express();
app.use(express.static('public'));

// SSL
https.createServer(
    {
        ca: fs.readFileSync(__dirname + '/server.ca'),
        key: fs.readFileSync(__dirname + '/server.key'),
        cert: fs.readFileSync(__dirname + '/server.cert')
    }
, app).listen(443, function() {
    console.log('Server is now running.');
});

// HTTP redirect to SSL
express()
    .get('*', function(req,res){
        res.redirect('https://example.com' + req.url)
    })
    .listen(80);

3 个答案:

答案 0 :(得分:4)

忘了回答这个,但我发现我在我的https服务器上添加了一个ca文件和参数,然后Facebook接受了它。

答案 1 :(得分:0)

您可以使用以下shell的链式证书:

cat www.example.com.crt bundle.crt > www.example.com.chained.crt

来自http://nginx.org/en/docs/http/configuring_https_servers.html#chains

答案 2 :(得分:0)

尝试使用强验证令牌setup FB messenger webhook。有点像这样:o\/ERviEE\/vt0|<E|\|

o/ERviEE/vt0|<E|\| verify token set

在代码中验证了相同的内容:

req.query['hub.verify_token'] === 'o\/ERviEE\/vt0|<E|\|'

但是,从FB收到的值是:o\\/ERviEE\\/vt0|<E|\\|

o\/ERviEE\/vt0|<E|\|  verify token get

这很奇怪。似乎没有这样的文档参考,其中讨论了Facebook如何逃避用于验证令牌或类似的特殊字符。不确定其他实体是否也会发生这种情况。

结论:使用特殊字符验证令牌时需要谨慎一些。

因为,Facebook逃脱了webhooks'验证令牌的特殊字符。