13 Commits
1.1.0 ... 1.2.0

Author SHA1 Message Date
balvarez
9b130ce07b Merge branch 'release/1.2.0'
All checks were successful
DitesLeEnChanson/site/pipeline/tag This commit looks good
2026-01-04 11:44:16 +01:00
balvarez
b170d54b0e version 1.2.0 2026-01-04 11:43:59 +01:00
balvarez
4157880669 Merge tag '1.1.3' into develop
1.1.3
2026-01-04 11:06:47 +01:00
balvarez
0a8e61948b Merge branch 'release/1.1.3'
All checks were successful
DitesLeEnChanson/site/pipeline/tag This commit looks good
2026-01-04 11:06:37 +01:00
balvarez
e06c43542a version api url 2026-01-04 11:06:23 +01:00
balvarez
ed4b4f6e5a Merge tag '1.1.2' into develop
1.1.2
2026-01-03 21:31:51 +01:00
balvarez
2df974371c Merge branch 'release/1.1.2'
All checks were successful
DitesLeEnChanson/site/pipeline/tag This commit looks good
2026-01-03 21:31:42 +01:00
balvarez
31bdef2407 version 1.1.2 2026-01-03 21:31:30 +01:00
balvarez
f0109b703a adaptation api 2026-01-03 21:31:03 +01:00
balvarez
50921780a9 Merge tag '1.1.1' into develop
1.1.1
2026-01-03 21:20:07 +01:00
balvarez
7487efd9dc Merge branch 'release/1.1.1'
All checks were successful
DitesLeEnChanson/site/pipeline/tag This commit looks good
2026-01-03 21:19:58 +01:00
balvarez
460ac07f0f env 2026-01-03 21:19:43 +01:00
balvarez
fd3dcfee51 Merge tag '1.1.0' into develop
1.1.0
2026-01-03 21:12:24 +01:00
7 changed files with 135 additions and 18 deletions

119
TROUBLESHOOTING_API.md Normal file
View File

@@ -0,0 +1,119 @@
# Résolution des problèmes d'accès à l'API
## Problème : `net::ERR_NAME_NOT_RESOLVED`
Si vous rencontrez l'erreur `net::ERR_NAME_NOT_RESOLVED` lors de l'accès à l'API, cela signifie que le navigateur ne peut pas résoudre le nom de domaine `api.ditesleenchanson.fr`.
### Causes possibles
1. **Le domaine n'existe pas encore**
- Le sous-domaine `api.ditesleenchanson.fr` n'a pas été créé dans votre gestionnaire DNS
2. **Le domaine n'est pas configuré correctement**
- Les enregistrements DNS ne pointent pas vers le bon serveur
- Le DNS n'a pas encore propagé les changements (peut prendre jusqu'à 48h)
3. **Problème de configuration locale**
- La variable d'environnement `VITE_API_URL` pointe vers un domaine inaccessible
- Vous êtes en développement local mais l'URL pointe vers la production
### Solutions
#### 1. Vérifier la configuration de l'URL de l'API
Vérifiez le fichier `.env` dans `site/src/.env` :
```env
# Pour le développement local
VITE_API_URL=http://localhost:8000
# Pour la production (uniquement si le domaine est configuré)
VITE_API_URL=https://api.ditesleenchanson.fr
```
#### 2. Vérifier que l'API est accessible
**En développement local :**
- Assurez-vous que l'API Laravel est démarrée sur `http://localhost:8000`
- Testez l'accès à `http://localhost:8000/health` dans votre navigateur
**En production :**
- Vérifiez que le domaine `api.ditesleenchanson.fr` existe et pointe vers votre serveur
- Testez l'accès à `https://api.ditesleenchanson.fr/health` dans votre navigateur
- Vérifiez les enregistrements DNS de votre domaine
#### 3. Configuration DNS
Pour que `api.ditesleenchanson.fr` fonctionne, vous devez :
1. **Créer un enregistrement DNS de type A ou CNAME**
- Type A : pointe directement vers l'IP de votre serveur
- Type CNAME : pointe vers un autre domaine (ex: `ditesleenchanson.fr`)
2. **Configurer le serveur web** (Nginx/Apache)
- Créer un virtual host pour `api.ditesleenchanson.fr`
- Configurer le SSL/TLS (certificat Let's Encrypt recommandé)
3. **Vérifier la configuration Laravel**
- Dans `api/src/.env`, définir `APP_URL=https://api.ditesleenchanson.fr`
- Configurer `FRONTEND_URL` pour autoriser les requêtes depuis le frontend
#### 4. Test de connectivité
Pour tester si le domaine est accessible :
```bash
# Test DNS
nslookup api.ditesleenchanson.fr
# Test HTTP
curl https://api.ditesleenchanson.fr/health
# Test depuis le navigateur
# Ouvrir : https://api.ditesleenchanson.fr/health
```
### Configuration recommandée
#### Développement local
**Fichier `site/src/.env` :**
```env
VITE_API_URL=http://localhost:8000
```
**Démarrer l'API Laravel :**
```bash
cd api/src
php artisan serve
# L'API sera accessible sur http://localhost:8000
```
#### Production
**Fichier `site/src/.env` :**
```env
VITE_API_URL=https://api.ditesleenchanson.fr
```
**Fichier `api/src/.env` :**
```env
APP_URL=https://api.ditesleenchanson.fr
FRONTEND_URL=https://dites-le-en-chanson.fr
```
### Vérification après déploiement
1. Vérifier que l'API répond : `https://api.ditesleenchanson.fr/health`
2. Vérifier les logs de l'API pour les erreurs CORS
3. Vérifier la console du navigateur pour les erreurs de connexion
4. Tester le processus de paiement complet
### Support
Si le problème persiste après avoir vérifié ces points :
1. Vérifiez les logs de l'API Laravel (`api/src/storage/logs/laravel.log`)
2. Vérifiez les logs du serveur web (Nginx/Apache)
3. Vérifiez la configuration DNS avec votre hébergeur
4. Contactez le support technique

View File

@@ -1,4 +1,2 @@
VITE_STRIPE_PUBLISHABLE_KEY=pk_live_51RPSGmEPL3QASpovp8Q6p8ehNMW7TzSrOaV6zvPE1OtflMFN5jChQBEj5kr84wontlLOe8uiHyJBiCduzxIZwj5A00DIEVs31n VITE_API_URL=https://api.dites-le-en-chanson.fr
# VITE_STRIPE_PUBLISHABLE_KEY=pk_test_51RPSH1ERAUBjYKpgbz4GjZjDtI24rqfBky5SO6AwdBfZaqNmFN0zQSxx0Z1wfFKtKXIZXfx5IOQSt2ularULIsto00frDMNi03 #VITE_API_URL=http://127.0.0.1:8000
VITE_API_URL=https://api.ditesleenchanson.fr

View File

@@ -1,7 +1,7 @@
{ {
"name": "web-app", "name": "web-app",
"type": "module", "type": "module",
"version": "1.1.0", "version": "1.2.0",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "vite --host :: --port 3000", "dev": "vite --host :: --port 3000",

View File

@@ -1,7 +1,5 @@
import React from 'react'; import React from 'react';
import { ShoppingBag, Edit2, Music, Send } from 'lucide-react'; import { ShoppingBag, Edit2, Music, Send } from 'lucide-react';
export const STRIPE_PUBLISHABLE_KEY = import.meta.env.VITE_STRIPE_PUBLISHABLE_KEY;
export const products = [ export const products = [
{ {
id: 'prod_SQK3M9UvfXBUh0', id: 'prod_SQK3M9UvfXBUh0',
@@ -38,14 +36,14 @@ import React from 'react';
stripePriceId: 'price_1RVTXtEPL3QASpovaWjXf30q', stripePriceId: 'price_1RVTXtEPL3QASpovaWjXf30q',
description: 'Un texte de chanson unique, écrit sur mesure pour vous.', description: 'Un texte de chanson unique, écrit sur mesure pour vous.',
imageUrl: 'https://files.dites-le-en-chanson.fr/products/texte-personalise.jpg' imageUrl: 'https://files.dites-le-en-chanson.fr/products/texte-personalise.jpg'
}, // },
{ // {
id: 'prod_SQMCFqFLaNHxx0', // id: 'prod_SQMCFqFLaNHxx0',
name: 'Test', // name: 'Test',
price: 17.90, // price: 17.90,
promotionPrice: null, // promotionPrice: null,
stripePriceId: 'price_1RVVUBERAUBjYKpgYuQyuI76', // stripePriceId: 'price_1RVVUBERAUBjYKpgYuQyuI76',
description: 'Un texte de chanson unique, écrit sur mesure pour vous.', // description: 'Un texte de chanson unique, écrit sur mesure pour vous.',
// imageUrl: 'https://files.dites-le-en-chanson.fr/products/texte-personalise.jpg' // imageUrl: 'https://files.dites-le-en-chanson.fr/products/texte-personalise.jpg'
} }
]; ];

View File

@@ -87,13 +87,14 @@ export const api = {
/** /**
* Confirme une commande et envoie les emails * Confirme une commande et envoie les emails
*/ */
async confirmOrder(orderData, sessionId) { async confirmOrder(orderData, sessionId, orderId = null) {
try { try {
const data = await apiRequest('/orders/confirm', { const data = await apiRequest('/orders/confirm', {
method: 'POST', method: 'POST',
body: { body: {
orderData, orderData,
sessionId, sessionId,
orderId,
}, },
}); });
return { data, error: null }; return { data, error: null };

View File

@@ -11,6 +11,7 @@ import React, { useEffect, useState } from 'react';
const [orderDetails, setOrderDetails] = useState(null); const [orderDetails, setOrderDetails] = useState(null);
const [searchParams] = useSearchParams(); const [searchParams] = useSearchParams();
const sessionId = searchParams.get('session_id'); const sessionId = searchParams.get('session_id');
const orderId = searchParams.get('order_id');
const { toast } = useToast(); const { toast } = useToast();
const [isLoading, setIsLoading] = useState(true); const [isLoading, setIsLoading] = useState(true);
const [mainStatus, setMainStatus] = useState({ type: 'info', message: 'Traitement en cours...' }); const [mainStatus, setMainStatus] = useState({ type: 'info', message: 'Traitement en cours...' });
@@ -77,7 +78,7 @@ import React, { useEffect, useState } from 'react';
sessionStorage.setItem(processedKey, 'true'); sessionStorage.setItem(processedKey, 'true');
try { try {
const { data: functionResponse, error: functionError } = await api.orders.confirmOrder(orderDataForDB, sessionId); const { data: functionResponse, error: functionError } = await api.orders.confirmOrder(orderDataForDB, sessionId, orderId);
if (functionError) { if (functionError) {
console.error("API error:", functionError); console.error("API error:", functionError);

View File

@@ -182,7 +182,7 @@ const OrderPage = () => {
orderData: orderDataForDB, orderData: orderDataForDB,
quantity: 1, quantity: 1,
customerEmail: formData.email, customerEmail: formData.email,
successUrl: `${window.location.origin}/confirmation?session_id={CHECKOUT_SESSION_ID}`, successUrl: `${window.location.origin}/confirmation`,
cancelUrl: `${window.location.origin}/commander`, cancelUrl: `${window.location.origin}/commander`,
}); });