stripe = new StripeClient($stripeSecretKey); } /** * Créer une session de checkout Stripe * Remplace la fonction Supabase create-checkout-session */ public function createCheckoutSession(Request $request) { $validator = Validator::make($request->all(), [ 'priceId' => 'required|string', 'orderData' => 'nullable|array', 'successUrl' => 'required|url', 'cancelUrl' => 'required|url', 'quantity' => 'nullable|integer', 'customerEmail' => 'nullable|email', ]); if ($validator->fails()) { return response()->json([ 'error' => 'Données invalides: ' . $validator->errors()->first() ], 400); } try { // 1. Sauvegarder la commande dans la base de données $orderData = $request->input('orderData', []); // Si orderData n'est pas fourni, créer un objet minimal if (empty($orderData)) { $orderData = [ 'customer_email' => $request->input('customerEmail'), ]; } $order = Order::create([ ...$orderData, 'status' => 'pending_payment', ]); // 2. Créer la session Stripe $session = $this->stripe->checkout->sessions->create([ 'payment_method_types' => ['card'], 'line_items' => [ [ 'price' => $request->input('priceId'), 'quantity' => 1, ], ], 'mode' => 'payment', 'success_url' => $request->input('successUrl') . '&session_id={CHECKOUT_SESSION_ID}&order_id=' . $order->id, 'cancel_url' => $request->input('cancelUrl'), 'metadata' => [ 'order_id' => $order->id, 'product_name' => $orderData['product_name'] ?? '', ], 'customer_email' => $request->input('customerEmail') ?? $orderData['email'] ?? $orderData['customer_email'] ?? null, ]); return response()->json([ 'sessionId' => $session->id, 'url' => $session->url, ], 200); } catch (ApiErrorException $e) { return response()->json([ 'error' => 'Erreur Stripe: ' . $e->getMessage() ], 400); } catch (\Exception $e) { return response()->json([ 'error' => 'Erreur lors de la création de la session: ' . $e->getMessage() ], 500); } } }