Implement backend for blackjack game with Discord authentication, database integration, and WebSocket support
This commit is contained in:
49
src/routes/stripe.js
Normal file
49
src/routes/stripe.js
Normal file
@@ -0,0 +1,49 @@
|
||||
import express, { Router } from 'express';
|
||||
import Stripe from 'stripe';
|
||||
import { query } from '../db.js';
|
||||
|
||||
const router = Router();
|
||||
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY || '', {
|
||||
apiVersion: '2024-06-20'
|
||||
});
|
||||
|
||||
router.post('/api/stripe/webhook', express.raw({ type: 'application/json' }), async (req, res) => {
|
||||
const signature = req.headers['stripe-signature'];
|
||||
let event;
|
||||
|
||||
try {
|
||||
event = stripe.webhooks.constructEvent(
|
||||
req.body,
|
||||
signature,
|
||||
process.env.STRIPE_WEBHOOK_SECRET || ''
|
||||
);
|
||||
} catch (err) {
|
||||
return res.status(400).send('Webhook alairas hiba.');
|
||||
}
|
||||
|
||||
if (event.type === 'payment_intent.succeeded') {
|
||||
const intent = event.data.object;
|
||||
const amount = Number(intent.amount || 0);
|
||||
const userId = Number(intent.metadata?.userId || 0);
|
||||
|
||||
if (userId && amount) {
|
||||
const rows = await query(
|
||||
'SELECT status FROM deposits WHERE stripe_payment_intent_id = ?',
|
||||
[intent.id]
|
||||
);
|
||||
const status = rows[0]?.status;
|
||||
|
||||
if (status !== 'succeeded') {
|
||||
await query(
|
||||
'UPDATE deposits SET status = ? WHERE stripe_payment_intent_id = ?',
|
||||
['succeeded', intent.id]
|
||||
);
|
||||
await query('UPDATE users SET balance = balance + ? WHERE id = ?', [amount, userId]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return res.json({ received: true });
|
||||
});
|
||||
|
||||
export default router;
|
||||
Reference in New Issue
Block a user