'Méthode non autorisée']); exit(); } // Configuration de l'API Donorbox define('DONORBOX_EMAIL', 'contact@index.ngo'); define('DONORBOX_API_KEY', 'Q5oiaoxPwA5C2s1iafh_pihynM_5HOZbMZz6QwjVx2aLhWijOPI9rw'); define('CAMPAIGN_SLUG', 'soutenir-index-2025-don'); // Slug de la campagne à filtrer define('DONORBOX_API_URL', 'https://donorbox.org/api/v1/campaigns'); // Gestion du cache (5 minutes) $cacheFile = __DIR__ . '/cache/donorbox_data.json'; $cacheTime = 300; // 5 minutes en secondes // Vérifier si le cache existe et est valide if (file_exists($cacheFile) && (time() - filemtime($cacheFile) < $cacheTime)) { // Utiliser le cache $cachedData = file_get_contents($cacheFile); echo $cachedData; exit(); } // Appel à l'API Donorbox avec Basic Auth (--user format) $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => DONORBOX_API_URL, CURLOPT_RETURNTRANSFER => true, CURLOPT_USERPWD => DONORBOX_EMAIL . ':' . DONORBOX_API_KEY, // Format --user de cURL CURLOPT_HTTPAUTH => CURLAUTH_BASIC, CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'User-Agent: Index-NGO-Website' ], CURLOPT_TIMEOUT => 10, CURLOPT_SSL_VERIFYPEER => true ]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $curlError = curl_error($ch); curl_close($ch); // Gestion des erreurs if ($response === false) { http_response_code(500); echo json_encode([ 'error' => 'Erreur de connexion à Donorbox', 'details' => $curlError ]); exit(); } if ($httpCode !== 200) { http_response_code($httpCode); echo json_encode([ 'error' => 'Erreur API Donorbox', 'http_code' => $httpCode, 'response' => json_decode($response) ]); exit(); } // Décoder et valider la réponse $campaigns = json_decode($response, true); if (json_last_error() !== JSON_ERROR_NONE) { http_response_code(500); echo json_encode([ 'error' => 'Réponse JSON invalide', 'details' => json_last_error_msg() ]); exit(); } // Trouver la campagne correspondante par son slug/name $campaign = null; if (is_array($campaigns)) { foreach ($campaigns as $camp) { // Recherche par slug ou par name if (isset($camp['slug']) && $camp['slug'] === CAMPAIGN_SLUG) { $campaign = $camp; break; } if (isset($camp['name']) && strpos(strtolower($camp['name']), strtolower(CAMPAIGN_SLUG)) !== false) { $campaign = $camp; break; } } } // Si aucune campagne trouvée, utiliser la première ou renvoyer une erreur if ($campaign === null) { if (is_array($campaigns) && count($campaigns) > 0) { $campaign = $campaigns[0]; // Prendre la première campagne par défaut } else { http_response_code(404); echo json_encode([ 'error' => 'Aucune campagne trouvée', 'campaigns_count' => is_array($campaigns) ? count($campaigns) : 0 ]); exit(); } } // Extraire uniquement les données nécessaires $filteredData = [ 'total_raised' => $campaign['total_raised'] ?? 0, 'goal_amt' => $campaign['goal_amt'] ?? 50000, 'currency' => $campaign['currency'] ?? 'EUR', 'donations_count' => $campaign['donations_count'] ?? 0, 'campaign_name' => $campaign['name'] ?? 'Unknown', 'updated_at' => date('c') ]; $jsonResponse = json_encode($filteredData, JSON_PRETTY_PRINT); // Sauvegarder dans le cache if (!file_exists(dirname($cacheFile))) { mkdir(dirname($cacheFile), 0755, true); } file_put_contents($cacheFile, $jsonResponse); // Retourner la réponse echo $jsonResponse;