Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6b809d6f5d | ||
|
|
9b130ce07b | ||
|
|
b170d54b0e | ||
|
|
4157880669 | ||
|
|
0a8e61948b | ||
|
|
e06c43542a | ||
|
|
ed4b4f6e5a | ||
|
|
2df974371c | ||
|
|
31bdef2407 | ||
|
|
f0109b703a | ||
|
|
50921780a9 |
119
TROUBLESHOOTING_API.md
Normal file
119
TROUBLESHOOTING_API.md
Normal 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
|
||||
|
||||
6
src/.env
6
src/.env
@@ -1,4 +1,2 @@
|
||||
#VITE_STRIPE_PUBLISHABLE_KEY=pk_live_51RPSGmEPL3QASpovp8Q6p8ehNMW7TzSrOaV6zvPE1OtflMFN5jChQBEj5kr84wontlLOe8uiHyJBiCduzxIZwj5A00DIEVs31n
|
||||
VITE_STRIPE_PUBLISHABLE_KEY=pk_test_51RPSH1ERAUBjYKpgbz4GjZjDtI24rqfBky5SO6AwdBfZaqNmFN0zQSxx0Z1wfFKtKXIZXfx5IOQSt2ularULIsto00frDMNi03
|
||||
|
||||
VITE_API_URL=https://api.ditesleenchanson.fr
|
||||
VITE_API_URL=https://api.dites-le-en-chanson.fr
|
||||
#VITE_API_URL=http://127.0.0.1:8000
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "web-app",
|
||||
"type": "module",
|
||||
"version": "1.1.1",
|
||||
"version": "1.2.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "vite --host :: --port 3000",
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
import React from 'react';
|
||||
import { ShoppingBag, Edit2, Music, Send } from 'lucide-react';
|
||||
export const STRIPE_PUBLISHABLE_KEY = import.meta.env.VITE_STRIPE_PUBLISHABLE_KEY;
|
||||
|
||||
export const products = [
|
||||
{
|
||||
id: 'prod_SQK3M9UvfXBUh0',
|
||||
@@ -38,14 +36,14 @@ import React from 'react';
|
||||
stripePriceId: 'price_1RVTXtEPL3QASpovaWjXf30q',
|
||||
description: 'Un texte de chanson unique, écrit sur mesure pour vous.',
|
||||
imageUrl: 'https://files.dites-le-en-chanson.fr/products/texte-personalise.jpg'
|
||||
},
|
||||
{
|
||||
id: 'prod_SQMCFqFLaNHxx0',
|
||||
name: 'Test',
|
||||
price: 17.90,
|
||||
promotionPrice: null,
|
||||
stripePriceId: 'price_1RVVUBERAUBjYKpgYuQyuI76',
|
||||
description: 'Un texte de chanson unique, écrit sur mesure pour vous.',
|
||||
// },
|
||||
// {
|
||||
// id: 'prod_SQMCFqFLaNHxx0',
|
||||
// name: 'Test',
|
||||
// price: 17.90,
|
||||
// promotionPrice: null,
|
||||
// stripePriceId: 'price_1RVVUBERAUBjYKpgYuQyuI76',
|
||||
// description: 'Un texte de chanson unique, écrit sur mesure pour vous.',
|
||||
// imageUrl: 'https://files.dites-le-en-chanson.fr/products/texte-personalise.jpg'
|
||||
}
|
||||
];
|
||||
|
||||
@@ -87,13 +87,14 @@ export const api = {
|
||||
/**
|
||||
* Confirme une commande et envoie les emails
|
||||
*/
|
||||
async confirmOrder(orderData, sessionId) {
|
||||
async confirmOrder(orderData, sessionId, orderId = null) {
|
||||
try {
|
||||
const data = await apiRequest('/orders/confirm', {
|
||||
method: 'POST',
|
||||
body: {
|
||||
orderData,
|
||||
sessionId,
|
||||
orderId,
|
||||
},
|
||||
});
|
||||
return { data, error: null };
|
||||
|
||||
@@ -11,6 +11,7 @@ import React, { useEffect, useState } from 'react';
|
||||
const [orderDetails, setOrderDetails] = useState(null);
|
||||
const [searchParams] = useSearchParams();
|
||||
const sessionId = searchParams.get('session_id');
|
||||
const orderId = searchParams.get('order_id');
|
||||
const { toast } = useToast();
|
||||
const [isLoading, setIsLoading] = useState(true);
|
||||
const [mainStatus, setMainStatus] = useState({ type: 'info', message: 'Traitement en cours...' });
|
||||
@@ -77,7 +78,7 @@ import React, { useEffect, useState } from 'react';
|
||||
sessionStorage.setItem(processedKey, 'true');
|
||||
|
||||
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) {
|
||||
console.error("API error:", functionError);
|
||||
|
||||
@@ -182,7 +182,7 @@ const OrderPage = () => {
|
||||
orderData: orderDataForDB,
|
||||
quantity: 1,
|
||||
customerEmail: formData.email,
|
||||
successUrl: `${window.location.origin}/confirmation?session_id={CHECKOUT_SESSION_ID}`,
|
||||
successUrl: `${window.location.origin}/confirmation`,
|
||||
cancelUrl: `${window.location.origin}/commander`,
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user