Webhook回调地址是什么?
你在用第三方服务的时候,比如支付平台、短信网关或者代码托管平台,经常会看到一个叫“Webhook回调地址”的输入框。这玩意儿说白了就是:你告诉对方,“有事就往这个网址发消息”。
比如你在GitHub上提交代码,想自动触发服务器部署,就得填个回调地址,让GitHub在你推送代码后,自动往这个地址发个HTTP请求,通知你的服务器开始干活。
怎么填才不会出错?
很多人一上来就填localhost:3000这种本地地址,结果死活收不到消息——因为别人访问不了你电脑上的服务。回调地址必须是一个公网能访问的URL,比如 https://api.your-site.com/webhook/github。
如果你还在开发阶段,可以用 ngrok、localtunnel 这类工具把本地端口映射到公网。比如运行 ngrok http 3000,会得到一个类似 https://abc123.ngrok.io 的地址,把这个填进去就行。
服务器要怎么接收?
填了地址,还得让服务器接得住。一般流程是:第三方POST一个JSON过来,你的服务读取body,验证签名(如果有),然后执行对应逻辑。
举个Node.js的例子:
const express = require('express');
const app = express();
// 必须能解析JSON body
app.use(express.json({ type: 'application/json' }));
app.post('/webhook/github', (req, res) => {
const event = req.headers['x-github-event'];
const payload = req.body;
if (event === 'push') {
console.log('检测到代码推送,准备部署...');
// 执行部署脚本
}
res.status(200).send('OK');
});
app.listen(3000);注意:别忘了在防火墙或Nginx里开放对应端口,确保外网能打进来。
常见坑点提醒
有些人填完地址发现一直没反应,第一件事应该是去查日志。很多平台提供“最近请求”记录,比如GitHub的 webhook logs,能看到发送状态、响应码和返回内容。
另一个问题是HTTPS。现在大多数服务要求回调地址必须是https,除非是localhost。自签名证书可能不被信任,最好用正规CA签发的证书。
最后,别忘了加点安全措施。比如GitHub会在请求头带一个签名,你得用事先配置的密钥验一下,防止别人伪造请求乱刷你接口。