initial commit

This commit is contained in:
balvarez
2026-01-03 19:36:52 +01:00
parent 3eeaffd36e
commit e6e5c68a01
56 changed files with 11156 additions and 0 deletions

View File

@@ -0,0 +1,98 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Order;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Stripe\StripeClient;
use Stripe\Exception\ApiErrorException;
class StripeController extends Controller
{
private StripeClient $stripe;
public function __construct()
{
$stripeSecretKey = env('STRIPE_SECRET_KEY');
if (!$stripeSecretKey) {
throw new \RuntimeException('STRIPE_SECRET_KEY is not configured');
}
$this->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);
}
}
}