Saltar al contenido

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.

Importante: la pasarela (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.
UsoFormatoQuién lo comparte
Marketing / distribuidorahttps://tusitio.mx?ref=MARIA15Distribuidora → comprador
Checkout EventPasshttps://pay.eventpass.mx/{eventId}/{ticketTypeId}?ref=MARIA15Tu 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

  1. Capturar ?ref= al entrar a tu landing

    Si la URL trae ?ref=MARIA15, normalízalo (mayúsculas, solo alfanuméricos) y guárdalo.

  2. Persistir en cookie o localStorage

    Así no pierdes el código si el usuario navega dentro de tu sitio sin el query param.

  3. 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.

JavaScript — leer ref
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 — leer ref (landing server-side)
<?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.

JavaScript — appendReferralToCheckout
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 — append referral
<?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().

HTML + script
(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();
  };
})();
Uso en botón de compra
<!-- 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

Frontend (después de cargar tickets desde tu proxy)
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('')
}
Validación en servidor: EventPass valida el código al crear la orden. El descuento nunca se calcula en el cliente; solo envías el código y la API responde con el monto final.

Checklist para integradores

  • Link de distribuidora: https://tusitio.mx?ref=CODIGO
  • Al cargar la landing, leer ref y 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