在Node.js/Express中,ServiceM8的 webhook挑战验证始终返回“Invalid callback challenge key returned”

前端开发 2026-07-11

我正在注册一个ServiceM8的 webhook订阅,但总是收到这个错误:

{"success": false, "message": "Invalid callback challenge key returned", "detail": "Expected '29c97899930d7b3c'"}

我的Express服务器像下面这样处理验证挑战:

app.all('/webhook/job-complete', (req, res) => { const challenge = req.query.challenge || req.body.challenge; const mode = req.query.mode || req.body.mode; if (mode === 'subscribe' && challenge) { return res.status(200).send(challenge); } res.sendStatus(200); });

手动用curl测试可以正常工作。有没有人在Node.js/Express中让ServiceM8的 webhook验证跑通?挑战是通过GET还是POST发送的?

解决方案

curl发送的内容正是你所期望的,但ServiceM8可能发送略有不同的参数,或者需要更严格的响应格式。你能记录进入的请求、查询参数、请求体,并确认 challenge 实际传入的内容是 req.query,并确认 mode === 'subscribe' 吗?

把这个加上来,并把日志发到这里以供审阅:

app.all('/webhook/job-complete', (req, res) => { 

const challenge = req.query.challenge || req.body.challenge; 
const mode = req.query.mode || req.body.mode;

console.log('Query:', req.query);
console.log('Body:', req.body);

if (mode === 'subscribe' && challenge) { 
return res.status(200).send(challenge); 
}

res.sendStatus(200); 

});
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章