Guides d’intégration
Créer un annuaire de campagnes publiques réelles
Lisez la découverte depuis votre serveur, exposez une réponse limitée et reliez les visiteurs au parcours réel.
Avant de commencer
- Node 20+ avec fetch, Python 3 avec urllib ou PHP avec cURL et JSON sur votre serveur.
- Origine HTTPS du Server et pays réellement disponible ; aucune clé secrète pour cette lecture.
- Interface capable d’afficher du texte sans HTML injecté et de gérer les résultats vides ou indisponibles.
Choisir un type explicite
GET /api/public/homepage/discovery accepte type=all|ticketing|voting|donation, country, q, location, status, date, sort, page et limit. L’exemple lit la billetterie du Ghana ; il n’active aucun paiement.
Fixez la destination HTTPS côté serveur. Vérifiez le statut HTTP et success, avec un délai maximum.
export async function readPublicCampaigns() {
const url = new URL('/api/public/homepage/discovery', 'https://api.sparkglim.net');
url.search = new URLSearchParams({ type: 'ticketing', country: 'GH', sort: 'latest', page: '1', limit: '12' }).toString();
const response = await fetch(url, { headers: { accept: 'application/json' }, signal: AbortSignal.timeout(12000) });
const payload = await response.json();
if (!response.ok || payload.success !== true || !payload.data) throw new Error(payload.error || 'Discovery unavailable');
return payload.data;
}import json
import urllib.parse
import urllib.request
def read_public_campaigns():
query = urllib.parse.urlencode({"type": "ticketing", "country": "GH", "sort": "latest", "page": "1", "limit": "12"})
request = urllib.request.Request("https://api.sparkglim.net/api/public/homepage/discovery?" + query, headers={"Accept": "application/json"})
with urllib.request.urlopen(request, timeout=12) as response:
payload = json.load(response)
if payload.get("success") is not True or not isinstance(payload.get("data"), dict):
raise RuntimeError("Discovery unavailable")
return payload["data"]<?php
function read_public_campaigns(): array {
$query = http_build_query(['type'=>'ticketing','country'=>'GH','sort'=>'latest','page'=>1,'limit'=>12], '', '&', PHP_QUERY_RFC3986);
$handle = curl_init('https://api.sparkglim.net/api/public/homepage/discovery?' . $query);
curl_setopt_array($handle, [CURLOPT_RETURNTRANSFER=>true, CURLOPT_TIMEOUT=>12, CURLOPT_HTTPHEADER=>['Accept: application/json']]);
$raw = curl_exec($handle);
$status = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
$error = curl_error($handle);
curl_close($handle);
if ($raw === false || $status < 200 || $status >= 300) throw new RuntimeException($error ?: 'Discovery unavailable');
$payload = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
if (($payload['success'] ?? false) !== true || !is_array($payload['data'] ?? null)) throw new RuntimeException('Discovery unavailable');
return $payload['data'];
}Créer un relais de lecture limité
Enregistrez la fonction TypeScript dans read-public-campaigns.ts. L’exemple suivant est un gestionnaire Next.js à placer dans le dossier API prévu de votre application.
Cachez brièvement les réponses publiques réussies et utilisez no-store en erreur. N’acceptez jamais une origine amont fournie librement par un visiteur.
import { readPublicCampaigns } from './read-public-campaigns';
export async function GET() {
try {
const data = await readPublicCampaigns();
return Response.json({ success: true, data }, { headers: { 'Cache-Control': 'public, max-age=60' } });
} catch {
return Response.json({ success: false, error: 'Discovery unavailable' }, { status: 503, headers: { 'Cache-Control': 'no-store' } });
}
}Afficher les véritables données
Lisez data.entries, data.available et data.pagination. Une liste vide, une indisponibilité et une erreur sont des états distincts ; aucun événement fictif ne les remplace.
Affichez les titres comme texte et utilisez type et slug réels pour les liens de billetterie, vote ou don. Préservez langue et pays sans placer le paiement dans une iframe.
Vérifier votre intégration
- Vérifier données, absence de résultats et erreur 503 sans créer de transaction.
- Conserver type, pagination, devise, dates et règles de visibilité réels.