initial commit
This commit is contained in:
98
src/app/Http/Controllers/Api/StripeController.php
Normal file
98
src/app/Http/Controllers/Api/StripeController.php
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user