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

ASP.NET Web Forms中Stripe Webhook异常:PaymentIntentSucceeded事件失败

Stripe Webhook PaymentIntentSucceeded事件调试方案
  • 检查事件数据完整性与传输问题

    • 完整记录Stripe发送的原始请求体(通过Request.InputStream读取并写入日志/文件),对比CustomerCreated和PaymentIntentSucceeded的事件结构差异,排查是否存在字段缺失、格式异常。
    • 确认Web Forms的请求大小限制、表单验证模块是否截断了PaymentIntent的嵌套字段数据,这类事件通常包含更多层级结构,容易触发默认限制。
  • 手动解析事件数据,规避SDK自动反序列化问题

    • 跳过Stripe SDK的自动转换,先提取事件中data.object的JSON字符串,单独用JsonConvert.DeserializeObject<PaymentIntent>(objectJson)(Newtonsoft.Json)测试反序列化,输出详细的序列化错误信息,定位字段映射问题。
  • 排查Stripe SDK版本兼容性

    • 确认当前Stripe.NET SDK版本是否支持收到的PaymentIntentSucceeded事件的最新字段,不同版本SDK对Stripe API的字段兼容性存在差异,旧版本可能无法映射新字段导致静默失败,尝试升级至最新稳定版测试。
  • 修正异常捕获范围与线程上下文

    • 若使用异步处理逻辑,确保所有异步操作都用await,避免异常被吞入异步上下文。同时扩展捕获块覆盖所有执行路径,例如:
      try
      {
          var paymentIntent = stripeEvent.Data.Object as PaymentIntent;
          // 后续业务逻辑
      }
      catch (Exception ex)
      {
          Logger.Error($"PaymentIntent处理异常: {ex.Message}\n{ex.StackTrace}");
      }
      
    • 临时关闭全局异常过滤器或错误处理页面,排查是否存在上层拦截导致局部捕获块未触发的情况。
  • 验证Webhook签名与事件合法性

    • 重新检查签名验证代码,确保使用正确的Webhook密钥,且在解析事件前完成签名验证,同时记录签名验证的结果(成功/失败)。即使CustomerCreated事件正常,PaymentIntentSucceeded仍可能因传输过程中数据损坏导致签名通过但解析失败。
  • 增加细粒度日志定位执行断点

    • 在Retrieving PaymentIntent...日志后,逐行添加以下日志:
      • 记录stripeEvent.Data.Object的完整类型(stripeEvent.Data.Object.GetType().FullName)
      • 记录stripeEvent.Type的值,确认确实是payment_intent.succeeded
      • 记录事件ID,尝试通过ID直接调用Stripe API获取PaymentIntent:var pi = new PaymentIntentService().Get(stripeEvent.Data.Object.Id),记录该调用的结果与异常信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:10:16