我正在尝试将 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');
}
};
我似乎正在将元数据发送到条带,但它没有显示在任何条带日志上。不确定我做错了什么。如果有任何意见/建议,我将不胜感激。
我猜您发送的元数据就是您在
subscription_data
参数中传递的内容。如果是这样的话,那么您只是找错了地方。 您添加的 metadata
正在订阅对象上设置。 这不会自动复制到 Invoice 对象,这是在 invoice.paid
event 中返回的内容。 Stripe 记录了在相关对象之间复制元数据的几种情况这里。
如果您希望在处理
invoice.paid
事件时获取元数据,则需要使用可在 invoice.subscription
属性中找到的 ID 检索订阅对象。