10 Commits

Author SHA1 Message Date
balvarez
bd65cd6bbb Merge branch 'release/0.0.4'
All checks were successful
DitesLeEnChanson/api/pipeline/tag This commit looks good
2026-01-04 11:33:10 +01:00
balvarez
b41b198f55 0.0.4 2026-01-04 11:32:58 +01:00
balvarez
e17b18a25d correction stripe email 2026-01-04 11:31:58 +01:00
balvarez
42218f3c5d Merge tag '0.0.3' into develop
0.0.3
2026-01-03 21:32:52 +01:00
balvarez
ba089cef70 Merge branch 'release/0.0.3'
All checks were successful
DitesLeEnChanson/api/pipeline/tag This commit looks good
2026-01-03 21:32:43 +01:00
balvarez
f78820c850 adaptaion site 2026-01-03 21:32:24 +01:00
balvarez
75b8c6f2d2 Merge tag '0.0.2' into develop
0.0.2
2026-01-03 20:00:36 +01:00
balvarez
7d79062594 Merge branch 'release/0.0.2'
All checks were successful
DitesLeEnChanson/api/pipeline/tag This commit looks good
2026-01-03 20:00:25 +01:00
balvarez
15e465d3b1 jenkinsfile 2026-01-03 20:00:05 +01:00
balvarez
a9b7d3e174 Merge tag '0.0.1' into develop
0.0.1
2026-01-03 19:57:47 +01:00
4 changed files with 61 additions and 12 deletions

2
Jenkinsfile vendored
View File

@@ -1 +1 @@
apiPipeline(name: 'dites-le-en-chanson-api') apiPipeline(name: 'dites-le-en-chanson-api', phpVersion: '8.3')

View File

@@ -31,6 +31,7 @@ class OrderConfirmationController extends Controller
$validator = Validator::make($request->all(), [ $validator = Validator::make($request->all(), [
'orderData' => 'required|array', 'orderData' => 'required|array',
'sessionId' => 'nullable|string', 'sessionId' => 'nullable|string',
'orderId' => 'nullable|string',
]); ]);
if ($validator->fails()) { if ($validator->fails()) {
@@ -41,6 +42,7 @@ class OrderConfirmationController extends Controller
$orderData = $request->input('orderData'); $orderData = $request->input('orderData');
$sessionId = $request->input('sessionId'); $sessionId = $request->input('sessionId');
$orderId = $request->input('orderId');
// 1. Récupérer l'email vérifié depuis la session Stripe // 1. Récupérer l'email vérifié depuis la session Stripe
$customerEmail = null; $customerEmail = null;
@@ -57,7 +59,20 @@ class OrderConfirmationController extends Controller
$customerEmail = $orderData['email'] ?? $orderData['customer_email'] ?? null; $customerEmail = $orderData['email'] ?? $orderData['customer_email'] ?? null;
} }
// 2. Enregistrer la commande dans la base de données // 2. Chercher une commande existante ou en créer une nouvelle
$order = null;
// Chercher d'abord par orderId si fourni
if ($orderId) {
$order = Order::find($orderId);
}
// Sinon, chercher par sessionId
if (!$order && $sessionId) {
$order = Order::where('session_id', $sessionId)->first();
}
// Préparer les données de mise à jour
$finalOrderData = [ $finalOrderData = [
...$orderData, ...$orderData,
'customer_email' => $customerEmail, 'customer_email' => $customerEmail,
@@ -66,7 +81,13 @@ class OrderConfirmationController extends Controller
]; ];
try { try {
if ($order) {
// Mettre à jour la commande existante
$order->update($finalOrderData);
} else {
// Créer une nouvelle commande si aucune n'existe
$order = Order::create($finalOrderData); $order = Order::create($finalOrderData);
}
} catch (\Exception $e) { } catch (\Exception $e) {
\Log::error('Error saving order: ' . $e->getMessage()); \Log::error('Error saving order: ' . $e->getMessage());
$order = null; $order = null;

View File

@@ -30,7 +30,13 @@ class StripeController extends Controller
*/ */
public function createCheckoutSession(Request $request) public function createCheckoutSession(Request $request)
{ {
$validator = Validator::make($request->all(), [ // Normaliser les chaînes vides en null pour customerEmail
$requestData = $request->all();
if (isset($requestData['customerEmail']) && $requestData['customerEmail'] === '') {
$requestData['customerEmail'] = null;
}
$validator = Validator::make($requestData, [
'priceId' => 'required|string', 'priceId' => 'required|string',
'orderData' => 'nullable|array', 'orderData' => 'nullable|array',
'successUrl' => 'required|url', 'successUrl' => 'required|url',
@@ -47,12 +53,12 @@ class StripeController extends Controller
try { try {
// 1. Sauvegarder la commande dans la base de données // 1. Sauvegarder la commande dans la base de données
$orderData = $request->input('orderData', []); $orderData = $requestData['orderData'] ?? [];
// Si orderData n'est pas fourni, créer un objet minimal // Si orderData n'est pas fourni, créer un objet minimal
if (empty($orderData)) { if (empty($orderData)) {
$orderData = [ $orderData = [
'customer_email' => $request->input('customerEmail'), 'customer_email' => $requestData['customerEmail'] ?? null,
]; ];
} }
@@ -62,23 +68,44 @@ class StripeController extends Controller
]); ]);
// 2. Créer la session Stripe // 2. Créer la session Stripe
$session = $this->stripe->checkout->sessions->create([ $successUrl = $requestData['successUrl'];
// Ajouter les paramètres à l'URL (utiliser ? ou & selon si l'URL contient déjà des paramètres)
$separator = strpos($successUrl, '?') !== false ? '&' : '?';
$successUrlWithParams = $successUrl . $separator . 'session_id={CHECKOUT_SESSION_ID}&order_id=' . $order->id;
// Récupérer l'email (peut être dans customerEmail, orderData.email ou orderData.customer_email)
$customerEmail = $requestData['customerEmail'] ?? $orderData['email'] ?? $orderData['customer_email'] ?? null;
// Ne passer customer_email à Stripe que si l'email est valide et non vide
// Sinon, Stripe demandera l'email au client lors du checkout
$validEmail = null;
if ($customerEmail && is_string($customerEmail) && trim($customerEmail) !== '' && filter_var(trim($customerEmail), FILTER_VALIDATE_EMAIL)) {
$validEmail = trim($customerEmail);
}
$sessionParams = [
'payment_method_types' => ['card'], 'payment_method_types' => ['card'],
'line_items' => [ 'line_items' => [
[ [
'price' => $request->input('priceId'), 'price' => $requestData['priceId'],
'quantity' => 1, 'quantity' => 1,
], ],
], ],
'mode' => 'payment', 'mode' => 'payment',
'success_url' => $request->input('successUrl') . '&session_id={CHECKOUT_SESSION_ID}&order_id=' . $order->id, 'success_url' => $successUrlWithParams,
'cancel_url' => $request->input('cancelUrl'), 'cancel_url' => $requestData['cancelUrl'],
'metadata' => [ 'metadata' => [
'order_id' => $order->id, 'order_id' => $order->id,
'product_name' => $orderData['product_name'] ?? '', 'product_name' => $orderData['product_name'] ?? '',
], ],
'customer_email' => $request->input('customerEmail') ?? $orderData['email'] ?? $orderData['customer_email'] ?? null, ];
]);
// Ajouter customer_email seulement si valide
if ($validEmail) {
$sessionParams['customer_email'] = $validEmail;
}
$session = $this->stripe->checkout->sessions->create($sessionParams);
return response()->json([ return response()->json([
'sessionId' => $session->id, 'sessionId' => $session->id,

View File

@@ -2,6 +2,7 @@
"$schema": "https://getcomposer.org/schema.json", "$schema": "https://getcomposer.org/schema.json",
"name": "laravel/laravel", "name": "laravel/laravel",
"type": "project", "type": "project",
"version": "0.0.4",
"description": "The skeleton application for the Laravel framework.", "description": "The skeleton application for the Laravel framework.",
"keywords": ["laravel", "framework"], "keywords": ["laravel", "framework"],
"license": "MIT", "license": "MIT",