Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | import { Request, Response } from 'express'; import Stripe from 'stripe'; import { StripeService } from '../services/stripe'; import { stripeConfig } from '../config/stripe'; export class StripeController { private static stripeService = new StripeService(); // Only for test static async createTestSubscription(req: Request, res: Response) { try { const result = await StripeController.stripeService.createTestSubscription(); res.json({ success: true, data: result }); } catch (error: any) { res.status(500).json({ success: false, message: 'Erreur lors de la création de l\'abonnement de test', error: { message: error.message, type: error.type, code: error.code } }); } } static async createCheckoutSession(req: Request, res: Response) { try { const session = await StripeController.stripeService.createCheckoutSession(req.body, req.body.frequency); res.json({ success: true, sessionId: session.id }); } catch (error) { console.error('Error creating checkout:', error); res.status(500).json({ success: false, message: 'Erreur lors de la création de la session de paiement' }); } } static async getSubscription(req: Request, res: Response) { try { const subscription = await StripeController.stripeService.getSubscription(req.params.id); res.json({ success: true, subscription }); } catch (error) { res.status(500).json({ success: false, message: 'Erreur lors de la récupération de l\'abonnement' }); } } static async createPortalSession(req: Request, res: Response) { try { const session = await StripeController.stripeService.createPortalSession(req.params.id); res.json({ success: true, url: session.url }); } catch (error) { res.status(500).json({ success: false, message: 'Erreur lors de la création de la session du portail' }); } } static async handleWebhook(req: Request, res: Response): Promise<any> { const sig = req.headers['stripe-signature'] as string; let event: Stripe.Event; try { event = Stripe.webhooks.constructEvent(req.body, sig, stripeConfig.STRIPE_WEBHOOK_SECRET!); } catch (err: any) { return res.status(400).send(`Webhook Error: ${err.message}`); } try { switch (event.type) { case 'checkout.session.completed': const session = event.data.object as Stripe.Checkout.Session; if (session.status === 'complete') { const subscription = JSON.parse(session.metadata!.subscription); // Stock subscription (create process) console.log('New subscription:', subscription); } break; case 'invoice.payment_succeeded': const invoice = event.data.object as Stripe.Invoice; if (['subscription_update', 'subscription_cycle'].includes(invoice.billing_reason!)) { const subscription = await StripeController.stripeService.getSubscription((invoice as any).subscription); // Update subscription (update process) console.log('Subscription update:', subscription); } break; case 'customer.subscription.deleted': const deletedSubscription = event.data.object as Stripe.Subscription; // Delete subscription (update process to delete) console.log('Subscription deleted:', deletedSubscription.id); break; } res.json({ received: true }); } catch (error) { console.error('Webhook error:', error); res.status(500).json({ success: false, message: 'Error processing webhook' }); } } } |