SuperAPI AI 工具集

integrating-stripe-webhooks

编程与开发

查看项目

更新于 10-16 03:47

技能介绍

用途:在实现 Stripe webhook 端点、遇到“Raw body not available”或签名验证错误时使用。Stripe 的 constructEvent() 必须使用收到的原始字节验证签名,而多数框架会自动解析 JSON,从而破坏验证,本技能提供针对框架的原始请求体解决方案,并记录常见的 TypeScript 类型不匹配。

主要能力与用法:核心模式为获取原始字节/缓冲区,再验证签名,最后使用 Stripe 解析后的事件。Fastify 中在注册路由前用 server.addContentTypeParser('application/json', { parseAs: 'buffer' }, ...) 把原始 body 存入 req.rawBody;Express 中把 app.post('/webhooks/stripe', express.raw({ type: 'application/json' }), ...) 定义在 express.json() 之前;FastAPI 中使用 await request.body() 而非 .json()。

常见错误修复:订阅周期字段缺失时,从 subscription.items.data[0] 读取 current_period_start/current_period_end,并回退到 billing_cycle_anchor;404 通常因 webhook 路由注册在 API 前缀之外;结账 URL 需用 encodeURIComponent() 对动态参数编码。校验清单包括配置原始请求体解析器、在 API 前缀内注册路由、设置 STRIPE_WEBHOOK_SECRET、检查 stripe-signature 头、将 SignatureVerificationError 单独处理、对已接收事件返回 200 并记录事件 ID 与类型。

本地测试可用:brew install stripe/stripe-cli/stripe;stripe listen --forward-to localhost:3000/api/v1/webhooks/stripe;stripe trigger customer.subscription.created。限制:不适用于非 webhook 的通用 Stripe API 集成、前端 Stripe Elements 或结账会话创建;具体价格、平台与效果资料暂未提供。