我使用以下文件启动了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”。响应与预期的挑战不匹配'然后给出对挑战的不同响应。也就是说,我的URL以“Hello world,我似乎正在工作”而不是数字键响应。
非常感谢您的帮助!
答案 0 :(得分:2)
您需要将FB指向其中包含验证功能的路由。您当前正在将FB指向站点根索引'/'
。
将应用设置中的FB webhook网址更改为https://YOUR_DOMAIN.com/webhook
,验证即告完成。然后,FB会将您订阅的任何事件发送到'/webhook'
路径。
如果这不起作用,请注意您已将验证令牌硬编码为test-token
:
...
if (req.query['hub.verify_token'] === 'test-token') { ...
如果您将webhook验证令牌设置为'test-token'
,则只会完成此挑战。做这个imo的更好方法是:
...
if (req.query['hub.verify_token'] === process.env.VERIFY_TOKEN ) { ...
在上面的示例中,在尝试验证webhook之前,您必须在运行服务器时传入为webhook选择的验证令牌。
在您的heroku信息中心中,添加VERIFY_TOKEN
并将您的令牌作为配置变量的值。这将使验证令牌无需硬编码即可使用。