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

Next.js集成Stripe Webhook时Firebase Admin报项目ID检测失败错误

解决Next.js Stripe Webhook中Firebase "unable to detect a project id"错误

1. 抽离Firebase Admin初始化到单独文件

把Firebase Admin的初始化逻辑从API路由中分离,避免路由冷启动时的初始化异常:

创建lib/firebase-admin.ts文件:

import * as admin from "firebase-admin";

if (!admin.apps.length) {
  admin.initializeApp({
    credential: admin.credential.cert({
      projectId: process.env.FIREBASE_PROJECT_ID,
      clientEmail: process.env.FIREBASE_CLIENT_EMAIL,
      privateKey: process.env.FIREBASE_PRIVATE_KEY!.replace(/\\n/g, "\n"),
    }),
  });
}

export const db = admin.firestore();
export default admin;

然后在Webhook路由中导入使用:

import { db } from "@/lib/firebase-admin";
// 移除原文件中的Firebase初始化代码

2. 显式指定Firestore项目ID(可选)

如果初始化后仍报错,在获取Firestore实例时显式传入项目ID:

export const db = admin.firestore({
  projectId: process.env.FIREBASE_PROJECT_ID,
});

3. 检查环境变量格式

  • 确保.env.local中FIREBASE_PRIVATE_KEY完整包裹在双引号内,保留原始换行结构(从Firebase控制台复制的私钥直接粘贴时,换行符会被转义,你的replace处理是正确的,但要确认变量未被截断)
  • 确认FIREBASE_PROJECT_ID、FIREBASE_CLIENT_EMAIL、FIREBASE_PRIVATE_KEY这三个变量在服务端环境中正常读取(Next.js服务端API路由可直接读取非NEXT_PUBLIC_开头的变量)

4. 修复异步操作的错误用法

你代码中在Firestore snapshot的forEach里使用async/await会导致操作无法正确等待,改成Promise.all:
以handleInvoicePaid为例:

if (!snapshot.empty) {
  await Promise.all(
    snapshot.docs.map(async (doc) => {
      await usersRef.doc(doc.id).update({
        subscriptionStatus: subStatus,
        subscriptionId: subscriptionId,
        startDate: timeConverter(subscription.current_period_start),
        endDate: timeConverter(subscription.current_period_end),
        customerId: subscription.customer,
        subType: interval,
        productName: productName,
        amount: price,
      });
    })
  );
}

5. 确认Stripe Webhook的请求体处理

确保禁用bodyParser的配置正确,Stripe需要原始请求体验证签名,你的当前配置没问题,但可以再确认:

export const config = {
  api: {
    bodyParser: false,
  },
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 04:11:13