带有 firebase 的条纹​​ webhook 显示错误

stripe webhook with firebase showing error

它显示 STRIPE_SIGNING_SECRET 错误的意外值,即使在 env 文件中检查了很多次

终端显示创建的所有内容,但它没有到达 firebase 数据库我认为代码中有错误

条纹仪表板还显示已连接

我在 git 终端

中使用转发到本地主机的线路

webhook 代码

import { buffer } from "micro";
import * as admin from 'firebase-admin'

//secure a connection to Firebase from backend
const serviceAccount = require('../../../permissions.json');
const app = !admin.apps.length ? admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
}) 
  : admin.app();

// establish connection to stripe
const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);

const endpointSecret = process.env.STRIPE_SIGNING_SECRET;
if (typeof endpointSecret !== "string") {
    console.error("Unexpected value for STRIPE_SIGNING_SECRET");
    // potentially throw an error here
  }

const fulfillOrder = async (session) => {
    //console.log('Fulfilling order', session)

    return app
    .firestore()
    .collection("user")
    .doc(session.metadata.email)
    .collection("orders")
    .doc(session.id)
    .set({
        amount: session.amount_total / 100,
        amount_shipping: session.amount_total_details.amount_shipping / 100,
        images: JSON.parse(session.metadata.images),
        timestamp: admin.firestore.FieldValue.serverTimestamp(),
    })
    .then(() => {
        console.log(`success: order ${session.id} had been added to db`);
    });
};

export default async (req, res) =>{
    if(req.method === 'post'){
        const requestBuffer = await buffer(req);
        const payload = requestBuffer.toString();
        const sig = req.headers["stripe-signature"];

        let event;

        // verify that the event posted came from stripe 
        try{
            event = stripe.webhooks.constructEvent(
                 payload,
                 sig,
                 endpointSecret);
        } catch (err) {
            console.log('ERROR', err.message)
            return res.status(400).send(`Webhook error: ${err.message}`)
        }

        //handle the checkout event 
        if (event.type === 'checkout.session.completed') {
            const session = event .data.object;

            //fulfill the order...
            return fulfillOrder(session)
            .then(() => res.status(200))
            .catch((err) => res.status(400).send(`Webhook error: ${err.message}`));
        }
    }
};

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

firebase 规则

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow write: if false;
      allow read: if true;
    }
  }
}

const endpointSecret = process.env.STRIPE_SIGNNING_SECRET;

错别字:STRIPE_SIGNNING_SECRET

为避免下一个问题,请更正另一个错字:

const sig = req.headers["stripe-signatur"];

stripe-signature