You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Node.js验证Twilio API的GET请求Webhook?POST验证已实现但GET失败

Twilio GET请求Webhook验证失败的修复方案

你的代码存在两个核心问题,直接导致验证失败:

  1. 参数传递逻辑错误
    Twilio签名验证规则中,GET请求的URL只需传入基础路径(不含Query参数),Query参数要单独作为params参数传给validateRequest方法。你现在把参数拼入URL后清空了params,相当于没传入任何验证所需的参数,自然无法通过校验。

  2. 手动拼接参数易引发编码/排序问题
    手动拼接Query参数时未处理URL编码,也没有遵循Twilio要求的键名按ASCII升序排序规则,这会导致签名计算的原始数据和Twilio端不一致。

修正后的代码

router.get('/postatus', async (req, res) => {
    console.log('route /postatus');
    const authToken = process.env.MY_TWILIO_AUTH_TOKEN_VAR;
    // URL仅保留基础路径,不要带任何Query参数
    const url = 'https://myurl.com/postatus';
    // GET请求的验证参数直接使用req.query
    const params = req.query;
    const twilioSignature = req.headers['x-twilio-signature'];

    // 传入正确的URL和参数进行验证
    const validRequest = client.validateRequest(authToken, twilioSignature, url, params);

    // 后续业务逻辑
    if (validRequest) {
        res.send('验证通过');
    } else {
        res.status(403).send('验证失败');
    }
});

额外注意事项

  • 确保url和Twilio控制台配置的Webhook地址完全一致,包括协议、域名、路径,绝对不能带Query参数。
  • 如果应用使用了代理(如Nginx、云平台代理),要保证req.headers['x-twilio-signature']能被正确获取,同时URL必须使用公网可访问的地址,不能用localhost。
  • 无需手动对req.query排序,Twilio的Node SDK会自动按ASCII升序处理参数键,再计算签名。

内容的提问来源于stack exchange,提问作者dmikester1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 00:47:15