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

如何在Heroku中配置允许Stripe IP地址以接收Webhook请求?

问题解答

排查方向是否正确?

你的排查方向完全正确。原因如下:

  • 能正常调用Stripe API创建客户、设置账单,说明应用到Stripe的出站网络、API密钥配置、核心业务代码逻辑都没问题。
  • Stripe触发Webhook时出现"Timed out connecting to remote host",核心问题是Stripe无法成功发起对你Heroku应用的入站请求,确实属于网络可达性或端点配置类问题,而非代码逻辑错误。

如何配置Heroku以接收Stripe的Webhook POST请求?

Heroku默认不限制外部入站请求,不需要额外配置“允许域名”,重点做好以下几步即可:

1. 确认生产端点的可达性

先验证你的生产Webhook端点是否能正常接收请求:

  • 用curl模拟POST请求测试:
    curl -X POST https://myapp.com/users/stripe/webhook -d '{}' -H "Content-Type: application/json"
    
  • 如果请求超时或返回错误,优先排查:
    • Heroku应用是否正常运行(用heroku ps查看进程状态);
    • 自定义域名myapp.com是否正确解析到Heroku应用(检查DNS记录,确保CNAME或A记录指向Heroku的服务器地址);
    • 应用路由是否正确,/users/stripe/webhook是否存在且能处理POST请求。

2. 正确配置Stripe后台的Webhook端点

所谓“更新允许的域名”实际是指在Stripe后台配置生产端点:

  • 登录Stripe Dashboard,进入Webhooks设置页面;
  • 添加生产环境端点:https://myapp.com/users/stripe/webhook;
  • 勾选你需要监听的事件(比如checkout.session.completed、customer.subscription.updated等);
  • 确保端点状态为“已启用”,没有被标记为失败。

3. 优化Webhook响应时间(避免Stripe超时)

Stripe要求Webhook端点必须在10秒内返回2xx响应,否则会触发超时:

  • 尽量异步处理Webhook事件:收到请求后立即返回200 OK,再把具体业务逻辑(比如更新数据库、发送通知)放入异步队列(比如Heroku Redis + Sidekiq)执行;
  • 检查代码中是否有耗时操作(比如大数据库查询、第三方API调用),如果有,全部移到异步任务中。

4. 查看Heroku日志定位细节

用Heroku CLI实时查看日志,确认请求是否到达应用:

heroku logs --tail
  • 如果能看到Stripe的请求日志,但返回错误,排查代码中的签名验证、路由逻辑;
  • 如果看不到请求日志,说明请求没到达Heroku,检查是否有第三方防火墙(比如Cloudflare)拦截了Stripe的IP,需要在防火墙规则中放行Stripe的官方IP段。

5. 验证Webhook签名(保障安全性)

虽然不是超时的直接原因,但必须确保代码正确验证Stripe Webhook签名,避免恶意请求:

  • 在代码中使用Stripe提供的Webhook密钥(在Stripe Dashboard的Webhook设置中获取),调用Stripe官方SDK的签名验证方法(比如Node.js中的stripe.webhooks.constructEvent)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:10:33