如何接收Webhook消息?WooCommerce对接Heroku Flask应用无日志排查
排查WooCommerce Webhook无法触发Heroku Flask应用日志输出的问题
我来帮你一步步定位问题,我之前在对接WooCommerce Webhook到Flask应用时也踩过类似的坑😉
先检查WooCommerce端的Webhook配置
- 确认Webhook的URL完全匹配:你的Flask路由是
/hook/,所以Webhook的URL必须是https://你的Heroku应用名称.herokuapp.com/hook/(注意末尾的斜杠不能少,Flask的路由是严格匹配的)。 - 检查Webhook的状态与触发事件:在WooCommerce后台→高级→Webhooks里,找到你创建的Webhook,确保状态是「活跃」,并且已经选择了正确的触发事件(比如「订单创建」「产品更新」等)。
- 查看Webhook的发送日志:点击对应Webhook的「日志」选项,看看有没有发送失败的记录——如果返回码是404,说明URL有误;如果是500,说明Flask应用内部出错;如果是200但还是没日志,那问题大概率在代码或者Heroku日志查看方式上。
排查Flask代码的核心问题
你当前代码里的request.get_json()很可能是问题所在!WooCommerce Webhook默认发送的是application/x-www-form-urlencoded格式的 payload,不是JSON格式,所以request.get_json()会返回None,自然不会有任何输出。
你可以二选一解决这个问题:
- 修改WooCommerce Webhook的交付格式:在Webhook设置里,把「交付方式」改成「JSON」,这样你的现有代码就能正常获取到数据了。
- 修改Flask代码适配默认格式:把
print(request.get_json())改成print(request.form),这样就能获取到WooCommerce发送的表单格式数据。
另外还有两个小细节要注意:
- 确保Heroku上的Flask应用是用生产级服务器启动的:比如在Procfile里配置
web: gunicorn app:app,而不是用flask run(后者只适合开发环境,生产环境下可能无法正确处理请求)。 - 正确查看Heroku日志:要用
heroku logs --tail命令实时追踪日志,普通的heroku logs可能只会显示旧日志,看不到最新的请求输出。
验证与测试方法
你可以手动发送请求来测试Flask应用是否正常接收数据:
- 用curl命令发送表单请求:
curl -X POST -d "test_data=hello_world" https://你的Heroku应用名称.herokuapp.com/hook/ - 或者用Postman发送POST请求,选择
form-data格式,添加几个键值对,然后查看Heroku日志是否有输出。
如果手动测试能看到日志,说明Flask应用没问题,再回头检查WooCommerce的Webhook配置即可。
内容的提问来源于stack exchange,提问作者Kresten
相关产品推荐
相关产品推荐

