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

Stripe Checkout在Vercel报错但localhost正常,如何解决?

解决Stripe Webhook在Vercel部署后失效的问题

常见原因及对应解决方案

1. Webhook签名验证失败(最常见)

Stripe的签名验证依赖原始请求体和stripe-signature请求头,但Vercel的Serverless函数环境默认会自动解析请求体,导致原始内容被修改,直接触发验证失败。

解决步骤:

  • 若使用Next.js App Router,在api/webhook/route.js中禁用自动body解析:
    export const config = {
      api: {
        bodyParser: false,
      },
    };
    
  • 手动读取原始请求体完成签名验证,示例代码:
    import { buffer } from 'micro';
    import Stripe from 'stripe';
    
    const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);
    
    export async function POST(req) {
      const buf = await buffer(req);
      const sig = req.headers.get('stripe-signature');
      let event;
    
      try {
        event = stripe.webhooks.constructEvent(
          buf,
          sig,
          process.env.STRIPE_WEBHOOK_SECRET
        );
      } catch (err) {
        return new Response(`Webhook Error: ${err.message}`, { status: 400 });
      }
    
      // 处理业务逻辑(比如用户升级)
      switch (event.type) {
        case 'checkout.session.completed':
          const session = event.data.object;
          // 这里编写升级用户的具体逻辑
          break;
        default:
          console.log(`未处理的事件类型:${event.type}`);
      }
    
      return new Response(JSON.stringify({ received: true }), { status: 200 });
    }
    
  • 确保安装依赖包:npm install micro

2. 环境变量配置错误

  • 确认Vercel项目环境变量中,STRIPE_WEBHOOK_SECRET是生产环境的签名密钥(与Stripe Dashboard生产模式下的webhook密钥一致,不要混用测试环境密钥);
  • 检查Vercel控制台「项目设置→环境变量」,确保变量已添加且在生产环境中启用(不要仅在开发环境配置);
  • 修改环境变量后重新触发Vercel部署,确保变量生效。

3. Serverless函数超时

Vercel Serverless函数默认超时时间为10秒,如果你的升级操作涉及复杂数据库查询、外部API调用等耗时任务,可能触发超时导致webhook处理失败。

解决步骤:

  • 优化业务逻辑,简化或拆分耗时操作;
  • 将核心逻辑异步化:webhook仅负责接收事件并写入队列(如Vercel KV + 定时任务),后续再异步处理用户升级操作。

4. Webhook URL配置错误

  • 确认Stripe Dashboard中配置的webhook URL为https://mydomain.com/api/webhook(必须是HTTPS,Stripe不支持生产环境HTTP请求);
  • 检查路径匹配:若使用Next.js Pages Router,需确保文件路径为pages/api/webhook.js,对应URL无额外前缀;
  • 在Stripe Dashboard中发送测试事件,验证URL是否能正常接收并响应。

5. 网络访问限制

若项目有自定义CORS或防火墙规则,需确保允许Stripe官方IP地址访问。可在Stripe官方文档中获取其IP列表并添加到允许名单。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 05:50:03