Guides d’intégration
Transmettre un vote réel au paiement central
L’éligibilité, les quantités et l’enregistrement restent sous l’autorité de SparkGlim Server.
Avant de commencer
- Campagne publique, catégorie active et candidat dont status et application_status sont approuvés.
- Dates, quantités, tarifs, devise et visibilité issus de la configuration réelle.
- Client Web protégé existant et autorisation de test contrôlée.
Respecter les règles du programme
Utilisez campaign_id et participant_id réellement sélectionnés, vote_count entier autorisé et coordonnées requises. Une validation locale ne donne pas de permission.
Respectez calendrier, catégorie et approbation. Ne publiez jamais de totaux masqués.
Garder la frontière protégée
Le client Web appelle fetchPublicFlow("/vote", ...) pour POST /api/public/vote. Storm prépare le contexte navigateur exigé par le serveur.
Cet import appartient au dépôt ; ce n’est pas un SDK universel. Un site externe sans protection approuvée doit utiliser la page de campagne ou une intégration Organisation approuvée, sans faux identifiants appareil.
Transmettre sans ajouter de votes côté client
La fonction inactive utilise une requête immuable et le même client_attempt_id. Elle ne devient pas une simulation de vote ou une autorisation lorsqu’elle est affichée.
Ouvrez l’URL centrale retournée. Le serveur confirme paiement et votes ; ni retour ni paramètre de succès ne modifie les comptes. Aucune vérification ou interrogation périodique côté navigateur.
'use client';
import { fetchPublicFlow } from '@/lib/server-backend/public-api';
type Input = { campaign_id: string; participant_id: string; vote_count: number; phone_number: string; email?: string; client_attempt_id: string; return_path: string };
let requestStarted = false;
export async function initializeApprovedTest(input: Input, approvedTest: boolean) {
if (!approvedTest || requestStarted) return null;
requestStarted = true;
const response = await fetchPublicFlow('/vote', {
method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(input)
});
const result = await response.json();
if (!response.ok || result.success !== true) throw new Error(result.error || 'Checkout unavailable');
if (typeof result.data?.authorization_url !== 'string') throw new Error('No paid checkout URL returned');
const target = new URL(result.data.authorization_url);
if (target.origin !== 'https://checkout.sparkglim.net' || target.username || target.password) throw new Error('Invalid checkout URL');
window.location.assign(target.href);
return target.href;
}Vérifier votre intégration
- Vérifier éligibilité, dates et limites sur des enregistrements de test.
- Préserver les comptes privés et la tentative incertaine sans second paiement ni vote annoncé.