Compare commits
8 Commits
7d79062594
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3b8008c498 | ||
|
|
bd65cd6bbb | ||
|
|
b41b198f55 | ||
|
|
e17b18a25d | ||
|
|
42218f3c5d | ||
|
|
ba089cef70 | ||
|
|
f78820c850 | ||
|
|
75b8c6f2d2 |
@@ -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 {
|
||||||
$order = Order::create($finalOrderData);
|
if ($order) {
|
||||||
|
// Mettre à jour la commande existante
|
||||||
|
$order->update($finalOrderData);
|
||||||
|
} else {
|
||||||
|
// Créer une nouvelle commande si aucune n'existe
|
||||||
|
$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;
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user