Códigos de referido en tu sitio
Si tu landing es propia (por ejemplo tusitio.mx), las distribuidoras comparten links como https://tusitio.mx?ref=MARIA15. Tu sitio debe leer ese código y, al enviar al comprador a la pasarela, concatenarlo al checkoutUrl de EventPass.
pay.eventpass.mx) no puede leer cookies de tu dominio. Debes pasar el código en la URL de pago como ?ref=CODIGO. Las cookies o localStorage en tu sitio sirven para recordar el código mientras el visitante navega en tu landing.Dos links, dos propósitos
| Uso | Formato | Quién lo comparte |
|---|---|---|
| Marketing / distribuidora | https://tusitio.mx?ref=MARIA15 | Distribuidora → comprador |
| Checkout EventPass | https://pay.eventpass.mx/{eventId}/{ticketTypeId}?ref=MARIA15 | Tu botón "Comprar" → pasarela |
Configura la URL de tu landing en el backoffice (campo Landing page del evento). Ahí generamos los links de referido para distribuidoras.
Convención recomendada
- Query param
- ref
- Cookie (opcional, en tu dominio)
- ep_ref
- localStorage (opcional)
- ep_ref
- Formato del código
- 4–20 caracteres, A–Z y 0–9, sin espacios
- Duración sugerida
- 30 días (cookie / localStorage)
Flujo en 3 pasos
Capturar ?ref= al entrar a tu landing
Si la URL trae ?ref=MARIA15, normalízalo (mayúsculas, solo alfanuméricos) y guárdalo.
Persistir en cookie o localStorage
Así no pierdes el código si el usuario navega dentro de tu sitio sin el query param.
Concatenar al checkoutUrl de pay
Cuando construyas el link de compra, agrega ?ref=CODIGO (o &ref= si la URL ya tiene query).
Cómo leer el código de referido
Orden de prioridad recomendado: primero la URL actual, luego localStorage, luego cookie.
function normalizeRef(raw) {
if (!raw) return ''
return String(raw).trim().toUpperCase().replace(/[^A-Z0-9]/g, '')
}
function readReferralCookie(name = 'ep_ref') {
const match = document.cookie.match(new RegExp('(?:^|;\\s*)' + name + '=([^;]+)'))
return match ? decodeURIComponent(match[1]) : ''
}
function getReferralCode() {
const fromUrl = new URLSearchParams(window.location.search).get('ref')
if (fromUrl) return normalizeRef(fromUrl)
const fromStorage = localStorage.getItem('ep_ref')
if (fromStorage) return normalizeRef(fromStorage)
return normalizeRef(readReferralCookie('ep_ref'))
}<?php
function normalize_ref(?string $raw): string {
if ($raw === null || $raw === '') return '';
return strtoupper(preg_replace('/[^A-Z0-9]/', '', trim($raw)));
}
function get_referral_code(): string {
if (!empty($_GET['ref'])) {
return normalize_ref($_GET['ref']);
}
if (!empty($_COOKIE['ep_ref'])) {
return normalize_ref($_COOKIE['ep_ref']);
}
return '';
}
$ref = get_referral_code();Concatenar el código al link de pay.eventpass.mx
Obtén checkoutUrl desde la API pública y agrega el referido antes de usarlo en tu botón de compra.
function appendReferralToCheckout(checkoutUrl, referralCode) {
const code = String(referralCode || '').trim().toUpperCase()
if (!code) return checkoutUrl
const url = new URL(checkoutUrl)
url.searchParams.set('ref', code)
return url.toString()
}
// Ejemplo con checkoutUrl de la API
const checkoutUrl = 'https://pay.eventpass.mx/EVENT_ID/TICKET_TYPE_ID'
const ref = getReferralCode()
const payLink = appendReferralToCheckout(checkoutUrl, ref)
// → https://pay.eventpass.mx/EVENT_ID/TICKET_TYPE_ID?ref=MARIA15<?php
function append_referral_to_checkout(string $checkoutUrl, string $ref): string {
$ref = strtoupper(preg_replace('/[^A-Z0-9]/', '', trim($ref)));
if ($ref === '') return $checkoutUrl;
$parts = parse_url($checkoutUrl);
parse_str($parts['query'] ?? '', $query);
$query['ref'] = $ref;
$scheme = $parts['scheme'] ?? 'https';
$host = $parts['host'] ?? '';
$path = $parts['path'] ?? '';
$port = isset($parts['port']) ? ':' . $parts['port'] : '';
return $scheme . '://' . $host . $port . $path . '?' . http_build_query($query);
}
$payLink = append_referral_to_checkout($ticket['checkoutUrl'], $ref);Snippet listo para pegar en tu landing
Inclúyelo una vez en tu HTML (antes de los botones de compra). Expone eventPassCheckoutUrl() y eventPassReferralCode().
(function () {
var STORAGE_KEY = 'ep_ref';
var COOKIE_NAME = 'ep_ref';
var COOKIE_MAX_AGE_DAYS = 30;
function normalizeRef(raw) {
if (!raw) return '';
return String(raw).trim().toUpperCase().replace(/[^A-Z0-9]/g, '');
}
function readCookie(name) {
var match = document.cookie.match(new RegExp('(?:^|;\\s*)' + name + '=([^;]+)'));
return match ? decodeURIComponent(match[1]) : '';
}
function writeCookie(name, value, days) {
var maxAge = days * 24 * 60 * 60;
document.cookie =
name + '=' + encodeURIComponent(value) +
'; path=/; max-age=' + maxAge + '; SameSite=Lax';
}
function captureReferralFromUrl() {
var params = new URLSearchParams(window.location.search);
return normalizeRef(params.get('ref'));
}
function getStoredReferral() {
return normalizeRef(
localStorage.getItem(STORAGE_KEY) || readCookie(COOKIE_NAME),
);
}
function storeReferral(code) {
if (!code) return;
localStorage.setItem(STORAGE_KEY, code);
writeCookie(COOKIE_NAME, code, COOKIE_MAX_AGE_DAYS);
}
// 1) Captura ?ref= al cargar la landing
var fromUrl = captureReferralFromUrl();
if (fromUrl.length >= 4) {
storeReferral(fromUrl);
}
// 2) Helper global para armar links de pago
window.eventPassCheckoutUrl = function (checkoutUrl) {
var code = fromUrl || getStoredReferral();
if (!code) return checkoutUrl;
try {
var url = new URL(checkoutUrl);
if (url.hostname !== 'pay.eventpass.mx' && url.hostname !== 'localhost') {
return checkoutUrl;
}
url.searchParams.set('ref', code);
return url.toString();
} catch (_err) {
var sep = checkoutUrl.indexOf('?') >= 0 ? '&' : '?';
return checkoutUrl + sep + 'ref=' + encodeURIComponent(code);
}
};
window.eventPassReferralCode = function () {
return fromUrl || getStoredReferral();
};
})();<!-- checkoutUrl viene de tu backend o de la API EventPass -->
<a
id="buy-ticket"
href="https://pay.eventpass.mx/EVENT_ID/TICKET_TYPE_ID"
>
Comprar boletos
</a>
<script>
document.getElementById('buy-ticket').addEventListener('click', function (e) {
e.preventDefault()
var base = this.getAttribute('href')
window.location.href = window.eventPassCheckoutUrl(base)
})
</script>Ejemplo completo con API + referido
async function renderTickets() {
const res = await fetch('/api/tickets')
const tickets = await res.json()
const ref = window.eventPassReferralCode?.() || ''
document.getElementById('tickets').innerHTML = tickets
.filter((t) => t.status === 'active' && t.availableQty > 0)
.map((t) => {
const price = (t.currentPrice / 100).toLocaleString('es-MX', {
style: 'currency',
currency: 'MXN',
maximumFractionDigits: 0,
})
const href = window.eventPassCheckoutUrl(t.checkoutUrl)
return `<a href="${href}" class="btn">${t.name} — ${price}${ref ? ' (descuento aplicable)' : ''}</a>`
})
.join('')
}Checklist para integradores
- Link de distribuidora:
https://tusitio.mx?ref=CODIGO - Al cargar la landing, leer
refy guardar en cookie/localStorage - Botón de compra:
checkoutUrl + ?ref=CODIGO - No confíes en cookies cross-domain hacia pay.eventpass.mx
- Códigos creados en backoffice → Evento → Referidos
- Snippet de visitas en tu landing: Analytics en tu sitio