Guías de integración
Enviar un voto real al pago central
Elegibilidad, cantidades y registro permanecen bajo la autoridad de SparkGlim Server.
Antes de empezar
- Campaña pública, categoría activa y nominado con status y application_status aprobados.
- Fechas, cantidades, precios, moneda y visibilidad de la configuración real.
- Cliente Web protegido existente y autorización de pruebas controladas.
Respetar las reglas del programa
Use campaign_id y participant_id realmente seleccionados, vote_count entero permitido y contactos requeridos. La validación local no concede acceso.
Respete fechas, actividad de categoría y aprobación. Nunca muestre recuentos ocultos.
Mantener la frontera protegida
El cliente llama fetchPublicFlow("/vote", ...) para POST /api/public/vote. Storm prepara el contexto de navegador exigido por Server.
Este import pertenece al repositorio, no a un SDK universal. Un sitio externo sin protección aprobada debe usar el enlace real o una integración Organización aprobada, sin identificadores de dispositivo falsos.
Transferir sin registrar votos en el navegador
La función inactiva recibe una petición inmutable y el mismo client_attempt_id. Mostrarla no envía votos ni otorga permisos de prueba.
Abra la URL central devuelta. Server confirma pago y votos; una consulta, retorno o sesión inicializada no incrementa recuentos. No añada verificación ni consultas periódicas del navegador.
'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;
}Compruebe su integración
- Comprobar elegibilidad, fechas y cantidades con registros controlados.
- Mantener recuentos privados y el intento incierto sin otro pago ni voto anunciado.