Firebase 和 Stripe 集成 - Stripe 不会在发票.paid() 上显示我的元数据

问题描述 投票:0回答:1

我正在尝试将 stripe 集成到我的 SaaS 上。在过去的 3 天里,我一直在尝试将唯一的 userID 元数据发送到 stripe。我的 UUID 没有显示在invoice.paid() 上,因此我无法判断哪个唯一用户已付款。


const db = admin.firestore();

module.exports = async (req, res) => {
  if (req.method === 'POST') {
    const { userId, priceId } = req.body;

    try {
      console.log('Creating session for Firebase UID:', userId);

      // Fetch the user from Firestore
      const userDoc = await db.collection('users').doc(userId).get();
      if (!userDoc.exists) {
        return res.status(404).json({ error: 'User not found' });
      }
      const userData = { uid: userDoc.id, ...userDoc.data() };

      // Create a checkout session
      const session = await stripe.checkout.sessions.create({
        payment_method_types: ['card'],
        line_items: [{ price: priceId, quantity: 1 }],
        mode: 'subscription',
        success_url: `${req.headers.origin}/success?session_id={CHECKOUT_SESSION_ID}`,
        cancel_url: `${req.headers.origin}/canceled`,
        client_reference_id: userId,
        customer_email: userData.email,
        metadata: { 
          firebaseUID: userId,
          userEmail: userData.email,
          subscriptionType: 'Pro'
        },
        subscription_data: {
          metadata: { 
            firebaseUID: userId,
            userEmail: userData.email,
            subscriptionType: 'Pro'
          }
        }
      });

      console.log('Checkout session created:', session.id);
      res.status(200).json({ sessionId: session.id });
    } catch (error) {
      console.error('Error creating checkout session:', error);
      res.status(500).json({ error: error.message });
    }
  } else {
    res.setHeader('Allow', 'POST');
    res.status(405).end('Method Not Allowed');
  }
};

我似乎正在将元数据发送到条带,但它没有显示在任何条带日志上。不确定我做错了什么。如果有任何意见/建议,我将不胜感激。

google-cloud-firestore stripe-payments
1个回答
0
投票

我猜您发送的元数据就是您在

subscription_data
参数中传递的内容。如果是这样的话,那么您只是找错了地方。 您添加的
metadata
正在订阅对象上设置。 这不会自动复制到 Invoice 对象,这是在
invoice.paid
event 中返回的内容。 Stripe 记录了在相关对象之间复制元数据的几种情况这里

如果您希望在处理

invoice.paid
事件时获取元数据,则需要使用可在 invoice.subscription
属性
中找到的 ID 检索订阅对象。

© www.soinside.com 2019 - 2024. All rights reserved.