Integration
Guía de integración para clientes: conecta Stripe (webhook de pagos) e instala el pixel web para atribución de afiliados.
Guía de Integración para Clientes
Todo lo que necesitas para conectar tu sitio web o app a RELO para el seguimiento de afiliados. Esta guía te lleva paso a paso por la configuración del seguimiento de pagos vía Stripe y la instalación del pixel web para analítica de tráfico.
Flujo de integración
Resumen
RELO es una plataforma de marketing de afiliados que rastrea qué partners (afiliados) llevan clientes a tu negocio. Cuando un partner comparte un enlace de seguimiento y un cliente hace clic, RELO registra ese clic. Cuando el cliente realiza una compra, RELO automáticamente asocia la venta al partner correcto y calcula su comisión. No necesitas construir ninguna lógica de atribución por tu cuenta.
Hay dos cosas que configurar:
💳 Stripe Webhook
Rastrea cada pago automáticamente. Requerido.
📊 Web Pixel
Rastrea vistas de página y comportamiento. Recomendado.
¿Qué integración necesitas?
Responde 3 preguntas rápidas y te indicaremos exactamente qué leer.
P1: ¿Cómo aceptas pagos?
- 💳 Stripe
- 🌐 PayPal
- ⚙️ Otro
P2: ¿Qué integración de Stripe usas?
- 🔗 Checkout (página alojada)
- 🎨 Elements (embebido)
- 🔄 Billing (subscriptions)
- ❓ No estoy seguro
P3: ¿Con qué está construido tu sitio web?
- 📄 Plain HTML
- 🛒 WordPress / Shopify
- ⚛️ React / Next.js
- 🔧 Otro framework
Cómo se Conecta Todo
1. Partner comparte enlace
2. Cliente hace clic
3. Navegación
4. Compra
5. Webhook a RELO
6. Atribución
7. Comisión
1. Webhook de Stripe (Seguimiento de Pagos)
⏱️ ~5 min
💳 Payment
🔔 Webhook
📡 RELO
📊 Dashboard
¿Por qué lo necesitas?
Cada vez que un cliente paga a través de Stripe, Stripe envía una notificación webhook a RELO. RELO procesa esta notificación, identifica qué partner trajo al cliente (usando la cookie de seguimiento de su clic) y registra la venta con la comisión correcta. Esto sucede automáticamente — no necesitas construir ningún código de seguimiento personalizado.
Tu URL de webhook es única para tu cuenta. Sigue este formato:
POST https://ingest.relo.mx/postback/stripe/{your-client-slug}
Reemplaza {your-client-slug} con el slug que tu contacto de RELO te proporcionó (ej., samsung, mycompany). Si no estás seguro de tu slug, consulta tu Dashboard de RELO en Config → Data Pipeline o pregunta a tu contacto de RELO.
Stripe Checkout (Hosted Payment Page)
Este es el escenario más común. Tu cliente hace clic en un botón "Pagar" y es redirigido a la página de checkout alojada de Stripe. Después del pago, regresa a tu sitio. Solo necesitas el webhook — no se requieren cambios de código.
Abre el Stripe Dashboard
Ve a dashboard.stripe.com/webhooks y haz clic en "Add endpoint".
Ingresa la URL del endpoint
Pega tu URL de webhook de RELO:
https://ingest.relo.mx/postback/stripe/{your-client-slug}Selecciona los eventos a escuchar
Haz clic en "Select events" y marca los siguientes:
checkout.session.completedinvoice.paid
Si también tienes suscripciones, agrega los eventos de suscripción listados en el Escenario C abajo.
Haz clic en "Add endpoint"
Stripe creará el webhook y te mostrará la página de detalles del endpoint.
Copia el signing secret
En la página de detalles del endpoint, haz clic en "Reveal" bajo "Signing secret". Copia el valor — comienza con whsec_.
Envía el signing secret a RELO
Tienes dos opciones:
- Opción A: Ve a tu Dashboard de RELO → Config → Data Pipeline → Stripe, y pega el secret ahí.
- Opción B: Envíalo directamente a tu contacto de RELO por email.
Stripe Elements (Embedded Checkout)
Si usas Stripe Elements para integrar un formulario de checkout directamente en tu sitio web, la configuración del webhook es exactamente la misma que el Escenario A. Sigue los 6 pasos del Escenario A.
Opcional: Mejora la atribución con metadata
Para mayor precisión en la atribución, puedes pasar el ID de clic de RELO como metadata al crear la Stripe Checkout Session o Payment Intent. Esto es opcional pero recomendado si tienes recursos de desarrollo disponibles.
El pixel de RELO establece una cookie llamada _relo_cid en tu dominio. Tu backend puede leer esta cookie e incluirla en la sesión de Stripe:
const session = await stripe.checkout.sessions.create({
line_items: [{ price: 'price_xxx', quantity: 1 }],
mode: 'payment',
success_url: 'https://yoursite.com/success',
cancel_url: 'https://yoursite.com/cancel',
metadata: {
relo_click_id: req.cookies._relo_cid || ''
}
}); session = stripe.checkout.Session.create(
line_items=[{"price": "price_xxx", "quantity": 1}],
mode="payment",
success_url="https://yoursite.com/success",
cancel_url="https://yoursite.com/cancel",
metadata={
"relo_click_id": request.COOKIES.get("_relo_cid", "")
}
) $session = \Stripe\Checkout\Session::create([
'line_items' => [['price' => 'price_xxx', 'quantity' => 1]],
'mode' => 'payment',
'success_url' => 'https://yoursite.com/success',
'cancel_url' => 'https://yoursite.com/cancel',
'metadata' => [
'relo_click_id' => $_COOKIE['_relo_cid'] ?? ''
]
]);Stripe Billing (Subscriptions)
Si tu negocio usa suscripciones recurrentes, la configuración del webhook es la misma que el Escenario A, pero debes suscribirte a eventos adicionales para rastrear el ciclo de vida completo de las suscripciones (nuevas suscripciones, renovaciones, cancelaciones, cambios de plan).
Al agregar o editar tu endpoint de webhook en Stripe, selecciona todos los siguientes eventos:
| Stripe Event | Qué rastrea | ¿Comisión? |
|---|---|---|
checkout.session.completed | Compra inicial de suscripción | Sí — primer pago |
invoice.paid | Pagos de renovación recurrentes | Sí — ingreso por renovación |
customer.subscription.created | Nueva suscripción creada | No — solo analítica |
customer.subscription.updated | Cambio de plan, upgrade, downgrade | No — solo analítica |
customer.subscription.deleted | Suscripción cancelada | No — solo analítica |
checkout.session.completed. Stripe también envía un invoice.paid para la misma transacción, pero RELO lo omite (porque la razón de facturación es subscription_create). Solo las facturas de renovación posteriores se cuentan como nuevo ingreso.Referencia de eventos
Lista para copiar de todos los eventos a suscribir. Selecciónalos en la configuración de tu webhook de Stripe:
checkout.session.completed
invoice.paid
customer.subscription.created
customer.subscription.updated
customer.subscription.deletedcheckout.session.completed e invoice.paid. Puedes omitir los tres eventos customer.subscription.*.Solución de Problemas
"El webhook está fallando" o "Endpoint retornó 401"
El signing secret (whsec_...) falta o es incorrecto. Verifica que copiaste el valor completo de Stripe y lo compartiste con tu contacto de RELO. Asegúrate de que no haya espacios o saltos de línea adicionales.
"Los pagos no aparecen en el Dashboard de RELO"
Primero, revisa los logs del webhook en tu Stripe Dashboard (Developers → Webhooks → tu endpoint). Si los eventos muestran una palomita verde, Stripe los entregó exitosamente. Si RELO aún no los muestra, verifica que los eventos correctos estén seleccionados (especialmente checkout.session.completed). Contacta a tu representante de RELO con el ID del evento de Stripe para investigar.
"Los pagos aparecen, pero atribuidos al partner incorrecto"
Esto significa que el cliente no usó el enlace de seguimiento del partner, o borró sus cookies entre el clic y la compra. Asegúrate de que los partners usen los enlaces de seguimiento generados por RELO (no URLs personalizadas). Si tienes recursos de desarrollo, agregar la metadata relo_click_id (ver Escenario B) mejorará la precisión de la atribución.
"Los pagos aparecen, pero con $0 de ingreso"
Esto puede pasar si tu sesión de Stripe Checkout usa un periodo de prueba gratuito o un cupón de $0. RELO registra el evento pero con cero ingresos. El ingreso se capturará en el primer evento invoice.paid real.
"Quiero hacer pruebas antes de ir a producción"
Usa el modo de prueba de Stripe. Activa el switch "Test mode" en tu Stripe Dashboard, crea un webhook con la misma URL de RELO, y usa la tarjeta de prueba 4242 4242 4242 4242 (cualquier fecha futura, cualquier CVC). Los eventos de prueba llegarán a RELO con una bandera de prueba.
2. Pixel Web (Analítica de Tráfico)
⏱️ ~3 min
🌐 Page load
📡 Pixel fires
⚙️ RELO
📊 Analytics
¿Por qué lo necesitas?
El pixel web es un pequeño fragmento de JavaScript que se ejecuta en tu sitio web. Rastrea vistas de página y comportamiento del usuario, permitiéndote ver qué partners generan más tráfico — incluso antes de que ocurra alguna compra. También establece una cookie de primera parte (_relo_cid) que mejora la precisión de la atribución de compras.
Direct HTML (Simplest)
Pega este fragmento en la sección <head> de cada página de tu sitio. Reemplaza YOUR_CLIENT_ID con el ID numérico de cliente de tu cuenta RELO.
<!-- RELO Tracking Pixel -->
<script>
(function(r,e,l,o){r.relo=r.relo||function(){
(r.relo.q=r.relo.q||[]).push(arguments)};
o=e.createElement('script');o.async=1;o.src=l;
e.head.appendChild(o);
})(window,document,'https://p.relo.mx/r.js');
relo('init', { client_id: YOUR_CLIENT_ID });
relo('page');
</script>¿Dónde pegarlo?
- Abre la plantilla HTML de tu sitio web (usualmente
index.html,layout.html, o la plantilla de encabezado de tu CMS) - Encuentra la etiqueta
<head> - Pega el fragmento justo antes de
</head> - Guarda y despliega
Google Tag Manager
Si usas Google Tag Manager (GTM) para gestionar scripts en tu sitio, puedes agregar el pixel de RELO como un tag HTML personalizado.
Open Google Tag Manager
Go to tagmanager.google.com and open your container.
Create a new Tag
Click Tags → New. Name it "RELO Tracking Pixel".
Choose tag type: Custom HTML
Paste the following code:
<script>
(function(r,e,l,o){r.relo=r.relo||function(){
(r.relo.q=r.relo.q||[]).push(arguments)};
o=e.createElement('script');o.async=1;o.src=l;
e.head.appendChild(o);
})(window,document,'https://p.relo.mx/r.js');
relo('init', { client_id: YOUR_CLIENT_ID });
relo('page');
</script>Set the trigger
Click Triggering and select "All Pages".
Save and Publish
Click Save, then Submit → Publish your container.
React / Next.js / Single Page App
Para aplicaciones de una sola página, necesitas llamar relo('page') en cada cambio de ruta ya que el navegador no hace una recarga completa de página.
Step 1: Add the pixel script to your HTML shell
In index.html (React) or _document.tsx (Next.js), add the pixel in the <head>:
<script>
(function(r,e,l,o){r.relo=r.relo||function(){
(r.relo.q=r.relo.q||[]).push(arguments)};
o=e.createElement('script');o.async=1;o.src=l;
e.head.appendChild(o);
})(window,document,'https://p.relo.mx/r.js');
relo('init', { client_id: YOUR_CLIENT_ID });
</script>Step 2: Track page views on route changes
import { useEffect } from 'react';
import { useLocation } from 'react-router-dom';
function useReloPageTracking() {
const location = useLocation();
useEffect(() => {
if (window.relo) {
window.relo('page');
}
}, [location.pathname]);
}
// Use in your App component:
function App() {
useReloPageTracking();
return <Routes>...</Routes>;
} // app/layout.tsx
'use client';
import { usePathname } from 'next/navigation';
import { useEffect } from 'react';
export default function RootLayout({ children }) {
const pathname = usePathname();
useEffect(() => {
if (window.relo) {
window.relo('page');
}
}, [pathname]);
return (
<html>
<head>
<script
dangerouslySetInnerHTML={{
__html: `
(function(r,e,l,o){r.relo=r.relo||function(){
(r.relo.q=r.relo.q||[]).push(arguments)};
o=e.createElement('script');o.async=1;o.src=l;
e.head.appendChild(o);
})(window,document,'https://p.relo.mx/r.js');
relo('init', { client_id: YOUR_CLIENT_ID });
`
}}
/>
</head>
<body>{children}</body>
</html>
);
} // pages/_app.tsx
import { useRouter } from 'next/router';
import { useEffect } from 'react';
function MyApp({ Component, pageProps }) {
const router = useRouter();
useEffect(() => {
const handleRouteChange = () => {
if (window.relo) window.relo('page');
};
router.events.on('routeChangeComplete', handleRouteChange);
return () => router.events.off('routeChangeComplete', handleRouteChange);
}, [router.events]);
return <Component {...pageProps} />;
}Shopify
Open your Shopify Admin
Go to Online Store → Themes.
Edit the theme code
Click Actions → Edit code (or the three dots menu → "Edit code").
Find theme.liquid
In the left sidebar under "Layout", click theme.liquid.
Paste the pixel snippet
Find the </head> tag in the file. Paste the RELO pixel code just before it:
<!-- RELO Tracking Pixel -->
<script>
(function(r,e,l,o){r.relo=r.relo||function(){
(r.relo.q=r.relo.q||[]).push(arguments)};
o=e.createElement('script');o.async=1;o.src=l;
e.head.appendChild(o);
})(window,document,'https://p.relo.mx/r.js');
relo('init', { client_id: YOUR_CLIENT_ID });
relo('page');
</script>Save
Click the Save button in the top right corner. The pixel is now live.
Eventos Personalizados (Opcional — Fase 2)
Después de instalar el pixel básico, puedes opcionalmente enviar eventos personalizados para rastrear acciones específicas del usuario. Esto desbloquea embudos de conversión, analítica de productos y datos de rendimiento de partners más detallados.
Evento de Compra
Dispara esto en tu página de confirmación de orden / página de agradecimiento:
relo('event', 'purchase', {
order_id: 'ORD-12345',
value: 299.99,
currency: 'MXN',
products: [
{ id: 'SKU-001', name: 'Product Name', price: 299.99, quantity: 1 }
]
});
Ver Producto
relo('event', 'view_product', {
product_id: 'SKU-001',
name: 'Galaxy S24 Ultra',
price: 24999,
currency: 'MXN',
category: 'Smartphones'
});
Agregar al Carrito
relo('event', 'add_to_cart', {
product_id: 'SKU-001',
name: 'Galaxy S24 Ultra',
price: 24999,
currency: 'MXN',
quantity: 1
});
Iniciar Checkout
relo('event', 'begin_checkout', {
value: 24999,
currency: 'MXN',
item_count: 1
});
Evento Personalizado (Genérico)
relo('event', 'sign_up', {
method: 'email',
plan: 'pro'
});
Verificación
Sigue estos pasos para confirmar que el pixel está instalado correctamente:
Open your website in a browser
Navigate to any page where you installed the pixel.
Open DevTools
Right-click anywhere on the page → Inspect (or press F12).
Check the Console tab
Type relo and press Enter. You should see a function, not undefined.
Check the Network tab
In the Network tab, type relo in the filter box. You should see:
- A request to
p.relo.mx/r.js(the pixel script loading) - A request to
p.relo.mx/e(the page view event being sent)
Both should show a 200 or 204 status.
Check the cookie
Go to the Application tab (Chrome) or Storage tab (Firefox). Under Cookies, find your domain. You should see a cookie named _relo_cid with a value like 01HX....
p.relo.mx, y la cookie _relo_cid, tu pixel está instalado correctamente. También puedes verificar en tu Dashboard de RELO en Config → Data Pipeline → Test Connection.3. Cómo Funciona la Atribución de Partners
⏱️ ~2 min read
No necesitas construir ninguna lógica de atribución. Aquí te explicamos lo que sucede detrás de escenas, para que entiendas cómo los partners reciben crédito por las ventas:
Partner shares link: ads, email, social
Customer clicks: cookie + click recorded
Browses your site: pixel tracks pages
Purchases: Stripe payment
Stripe sends webhook to RELO automatically
RELO matches to partner: cookie + email resolution
Commission calculated & visible in Dashboard: Admin Dashboard + Partner Portal
Detalles importantes
| Concepto | Descripción |
|---|---|
| Ventana de atribución | 30 días. Si un cliente hace clic en el enlace de un partner y compra dentro de 30 días, el partner recibe el crédito. |
| Atribución de último clic | Si un cliente hace clic en enlaces de múltiples partners, el clic más reciente antes de la compra gana. |
| Coincidencia basada en cookies | El método principal. La cookie _relo_cid vincula el clic con la compra. |
| Coincidencia basada en email | Para compras de Stripe, el email del cliente también se usa para resolución de identidad, proporcionando un respaldo cuando las cookies no están disponibles. |
| Comisión automática | Las tasas de comisión se configuran en el Dashboard de RELO. No necesitas calcular ni enviar montos de comisión. |
¿Qué necesitan hacer los partners?
Nada de tu lado. Los partners generan sus propios enlaces de seguimiento desde el Portal de Partners de RELO. Usan estos enlaces en sus campañas. No necesitas crear enlaces, gestionar cuentas de partners ni manejar ninguna lógica de seguimiento.
Preguntas Frecuentes
¿Necesito tanto el webhook de Stripe como el pixel?
El webhook de Stripe es requerido para el seguimiento de compras. El pixel es recomendado pero opcional. El webhook rastrea pagos, el pixel rastrea tráfico. Juntos te dan una imagen completa del rendimiento de los partners.
¿El pixel hará más lento mi sitio web?
No. El pixel carga de forma asíncrona y solo pesa ~2KB. No bloquea el renderizado de la página. Usa la Beacon API para enviar eventos, que no es bloqueante y no afecta la experiencia del usuario.
¿Qué pasa si usamos PayPal u otro proveedor de pagos?
Contacta a tu representante de RELO. Podemos configurar una integración de webhook personalizada para cualquier proveedor de pagos. El proceso es similar: configuras una URL de webhook en el dashboard de tu proveedor de pagos, y nosotros nos encargamos del resto.
¿Puedo hacer pruebas en el modo test de Stripe primero?
Sí. En tu Stripe Dashboard, cambia a "Test mode" y crea el endpoint de webhook con la misma URL de RELO. Usa el número de tarjeta de prueba 4242 4242 4242 4242 con cualquier fecha de expiración futura y cualquier CVC. Los eventos de prueba llegarán a RELO y aparecerán en tu dashboard.
¿Cómo sé que la integración está funcionando?
Ve a tu Dashboard de RELO → Config → Data Pipeline. La sección "Stripe" muestra el último webhook recibido y su estado. La sección "Pixel" muestra la última vista de página recibida. También puedes hacer clic en "Test Connection" para verificar ambos endpoints.
¿Qué datos recopila RELO de mis usuarios?
El pixel recopila: URL de la página, referrer, tipo de dispositivo, navegador, país y ciudad (por IP). No recopila nombres, emails ni ninguna información de identificación personal (PII) del navegador. Para los webhooks de Stripe, los emails de clientes se hashean (SHA-256) para resolución de identidad y nunca se almacenan en texto plano.
¿Puedo instalar el pixel en una app móvil?
El pixel web es solo para sitios web. Para seguimiento en apps móviles, RELO se integra con AppsFlyer, Branch y otros Mobile Measurement Partners (MMPs). Contacta a tu representante de RELO para detalles de integración en apps.
¿Necesito modificar mi flujo de checkout?
No. Si usas Stripe Checkout (página alojada), no hay cambios de código. Si usas Stripe Elements (checkout embebido), puedes opcionalmente agregar una línea de metadata para mejor atribución, pero no es requerido.
¿Qué pasa si un cliente bloquea las cookies?
Si las cookies están bloqueadas, RELO recurre a la resolución de identidad basada en email (usando el email hasheado del webhook de Stripe). La atribución puede ser menos precisa, pero la mayoría de las compras seguirán siendo correctamente asociadas.
¿Puedo eliminar el pixel después si no lo quiero?
Sí. Simplemente elimina el fragmento de tu HTML (o desactiva el tag en Google Tag Manager). El seguimiento de compras vía el webhook de Stripe seguirá funcionando de forma independiente.
Lista de Verificación de Integración
Rastrea tu progreso. Tu estado se guarda localmente para que puedas volver cuando quieras.
- Endpoint de webhook de Stripe agregado en Stripe Dashboard
- Eventos correctos seleccionados (
checkout.session.completed,invoice.paid) - Signing secret (
whsec_...) compartido con RELO - Fragmento del pixel web agregado a todas las páginas
- Pixel verificado: función
reloexiste en consola - Pixel verificado: solicitudes de red a
p.relo.mxvisibles - Pixel verificado: cookie
_relo_cidestablecida - Compra de prueba realizada en modo test de Stripe
- Compra de prueba visible en Dashboard de RELO
¡Integración Completa!
Tu integración de RELO está completamente configurada. Las ventas generadas por partners serán rastreadas automáticamente.
¿Necesitas Ayuda?
Si tienes preguntas o encuentras problemas, estamos aquí para ayudarte.