Fb开发者问题 – 'URL无法validation。 响应不符合预期的挑战'

我使用以下文件启动了一个Heroku应用程序:

app.js

'use strict' const express = require('express') const bodyParser = require('body-parser') const request = require('request') const app = express() app.set('port', (process.env.PORT || 5000)) // Process application/x-www-form-urlencoded app.use(bodyParser.urlencoded({extended: false})) // Process application/json app.use(bodyParser.json()) // Index route app.get('/', function (req, res) { res.send("Hello world, I seem to be working") }) // for Facebook verification app.get('/webhook', function (req, res) { if (req.query['hub.verify_token'] === 'test-token') { res.send(req.query['hub.challenge']); } else { res.send('Error, wrong validation token'); } }) // Spin up the server app.listen(app.get('port'), function() { console.log('running on port', app.get('port')) }) 

的.gitignore

 node_modules 

的package.json

 { "name": "heroku-node-practice", "version": "1.0.0", "description": "New bot", "main": "app.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node app.js" }, "author": "Paigal", "license": "ISC", "dependencies": { "body-parser": "^1.17.1", "express": "^4.15.2", "foobar": "^1.1.0", "mongoose": "^4.9.8", "request": "^2.81.0" } } 

Procfile

 web: node app.js 

我使用以下命令安装了node.js依赖项: npm install express request body-parser --save

git push heroku master ,应用程序正常启动。

但是,当试图在fb开发者中设置webhook时,错误是'URL无法validation。 响应不符合预期的挑战“,然后给出挑战的不同反应。 也就是说,我的url用“Hello world,我好像在工作”而不是数字键来回应。

将不胜感激您的帮助!

您需要将FB指向其中具有validationfunction的路由。 您目前正在将FB指向网站根索引'/'

将应用程序设置中的FB webhook url更改为https://YOUR_DOMAIN.com/webhook ,validation将完成。 然后,FB会将你订阅的任何事件发送到你的'/webhook'路由。

如果这不起作用,请注意您已将您的validation令牌硬编码为test-token

 ... if (req.query['hub.verify_token'] === 'test-token') { ... 

这只会完成挑战,如果'test-token'是您设置您的webhookvalidation令牌。 做这个imo的更好的方法是:

 ... if (req.query['hub.verify_token'] === process.env.VERIFY_TOKEN ) { ... 

在上面的例子中,在尝试validationwebhook之前,您必须在运行服务器时为您的webhook传入validation令牌。

在你的heroku仪表板中,添加VERIFY_TOKEN作为你的configurationvariables的值。 这将使得validation令牌可用而不用硬编码。