correction stripe email

This commit is contained in:
balvarez
2026-01-04 11:31:58 +01:00
parent 42218f3c5d
commit e17b18a25d
2 changed files with 32 additions and 9 deletions

View File

@@ -30,7 +30,13 @@ class StripeController extends Controller
*/
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',
'orderData' => 'nullable|array',
'successUrl' => 'required|url',
@@ -47,12 +53,12 @@ class StripeController extends Controller
try {
// 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
if (empty($orderData)) {
$orderData = [
'customer_email' => $request->input('customerEmail'),
'customer_email' => $requestData['customerEmail'] ?? null,
];
}
@@ -62,28 +68,44 @@ class StripeController extends Controller
]);
// 2. Créer la session Stripe
$successUrl = $request->input('successUrl');
$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;
$session = $this->stripe->checkout->sessions->create([
// 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'],
'line_items' => [
[
'price' => $request->input('priceId'),
'price' => $requestData['priceId'],
'quantity' => 1,
],
],
'mode' => 'payment',
'success_url' => $successUrlWithParams,
'cancel_url' => $request->input('cancelUrl'),
'cancel_url' => $requestData['cancelUrl'],
'metadata' => [
'order_id' => $order->id,
'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([
'sessionId' => $session->id,

View File

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