Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit.

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit.

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Portfolio

Latest Portfolio

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua erat libero condimentum metus.
// 1. Initialisation corrigée window.initAutocomplete = function() { var iDep = document.getElementById('input-depart'); var iArr = document.getElementById('input-arrivee'); if (!iDep || !iArr) return; // On garde l'ancien système mais on s'assure qu'il ne crash pas var opts = { componentRestrictions: {country: 'fr'}, fields: ['formatted_address', 'geometry', 'name'], types: ['geocode', 'establishment'] }; try { autocompleteDepart = new google.maps.places.Autocomplete(iDep, opts); autocompleteArrivee = new google.maps.places.Autocomplete(iArr, opts); autocompleteDepart.addListener('place_changed', function() { placeDepart = autocompleteDepart.getPlace(); console.log("Départ sélectionné :", placeDepart.formatted_address); }); autocompleteArrivee.addListener('place_changed', function() { placeArrivee = autocompleteArrivee.getPlace(); console.log("Arrivée sélectionnée :", placeArrivee.formatted_address); }); } catch (e) { console.warn("Note: Google Maps utilise l'ancienne version, mais ça fonctionne."); } // Liaison des boutons document.getElementById('btn-calculer').onclick = handleCalculer; document.getElementById('btn-maintenant').onclick = function() { setMode('maintenant'); }; document.getElementById('btn-planifier').onclick = function() { setMode('planifier'); }; }; // 2. Fonction de paiement BLINDÉE async function lancerPaiementStripe() { if (!dernierResultat) { alert("Erreur : Aucun calcul n'a été effectué."); return; } var btn = document.getElementById('btn-payer-ligne'); btn.textContent = 'Vérification...'; btn.disabled = true; console.log("Tentative d'envoi à Make.com..."); try { const response = await fetch(MAKE_WEBHOOK_URL, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(dernierResultat) }); console.log("Réponse reçue de Make, statut :", response.status); if (!response.ok) { throw new Error("Le serveur Make a répondu avec une erreur " + response.status); } const data = await response.json(); console.log("Données JSON reçues :", data); if (data.url) { console.log("Redirection vers Stripe..."); window.location.href = data.url; } else { console.error("Contenu de data reçu :", data); throw new Error("Make n'a pas renvoyé de lien Stripe. Vérifie ton module 3 (Webhook Response)."); } } catch (error) { console.error("ERREUR FINALE :", error); alert("Détail de l'erreur : " + error.message); btn.textContent = 'Payer en ligne'; btn.disabled = false; } }