I am trying to integrate stripe on my SaaS. I have been stuck for the last 3 days trying to send unique userID metadata to stripe. my UUID doesn’t show on invoice.paid() hence i can’t tell which unique user has made the payment.
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');
}
};
It seems like I am sending the metadata to stripe, but it doesn’t show up on any of the stripe logs. Not sure what I am doing wrong. Would appreciate any advice/suggestion here.
New contributor
user26605191 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.