部署至Azure后无法接收Stripe Webhook事件求助
Stripe Webhook在Azure部署后无法接收的排查方案
针对你描述的本地正常、Azure部署后无法接收Stripe Webhook的问题,按以下方向逐一排查:
一、端点可访问性验证
- 确认Webhook端点是公网可访问的HTTPS地址:Azure App Service默认提供HTTPS,需确保Stripe控制台中配置的Webhook URL是部署后的正式HTTPS地址(而非localhost)。
- 检查Azure访问限制:进入App Service的「网络」->「访问限制」,确认没有添加阻止Stripe请求的规则;如果有企业级防火墙,需放行Stripe官方文档中列出的Webhook发送IP段。
- 验证端点可用性:用Postman或curl向你的Azure端点发送模拟POST请求,确认能正常接收并返回200状态码。
二、Stripe签名验证配置
- 核对Webhook Secret:在Azure应用的「配置」->「应用程序设置」中,确保设置的Stripe Webhook Secret与Stripe控制台中对应Webhook的Secret完全一致。
- 检查签名验证代码:处理Webhook请求时必须正确验证签名,示例代码如下:
若签名验证失败,请求会被直接拒绝,需在应用日志中查看相关错误信息。// 从配置中获取Webhook Secret var webhookSecret = Configuration["Stripe:WebhookSecret"]; var json = await new StreamReader(HttpContext.Request.Body).ReadToEndAsync(); var stripeEvent = EventUtility.ConstructEvent( json, Request.Headers["Stripe-Signature"], webhookSecret );
三、Stripe事件状态与支付流程检查
- 查看Stripe控制台事件详情:进入Stripe Dashboard的「Webhooks」->「Events」,查找对应的
charge.succeeded事件,查看交付状态:- 若显示「Failed」:根据错误信息定位(如连接超时、SSL错误、签名无效等)。
- 若未触发该事件:检查对应Payment Intent的状态,是否因OffSession支付需要3DS验证而进入
requires_action状态,此时需监听payment_intent.requires_action事件处理验证流程。
- 确认Payment Intent配置:你的创建代码中
Confirm=true+OffSession=true适用于无用户交互的扣费,但需确保支付方式已完成Setup(即卡已成功关联到Customer且支持OffSession支付)。
四、Azure应用日志排查
- 查看应用请求日志:在Azure Portal的App Service「日志」->「应用程序日志」中,检查是否有Stripe发送的POST请求记录:
- 无请求记录:说明网络层面拦截了请求,回到第一步排查。
- 有请求但返回错误码(如400、401、500):根据日志中的异常信息修复代码(如请求体解析错误、未捕获的异常等)。
- 启用详细日志:在App Service的「配置」->「日志记录」中开启详细错误日志,便于定位问题。
五、SSL证书与代理检查
- 确认Azure的SSL证书有效:Stripe要求Webhook端点使用有效的公共SSL证书,Azure App Service默认证书符合要求;若使用自定义证书,需确保证书未过期、配置正确。
- 检查代理/网关配置:若使用Azure Front Door或API Management,需确保路由规则允许POST请求,且未修改Stripe请求的头部或请求体(否则会导致签名验证失败)。
内容的提问来源于stack exchange,提问作者Duc Thang
相关产品推荐
相关产品推荐

