Meritt Empezar

Todas las plataformas

El seguimiento de afiliación dentro de su aplicación

Si su sitio es una aplicación, la regla puede vivir dentro: una ruta en su prefijo de seguimiento que nos retransmite la petición y devuelve la respuesta. Tres detalles separan una ruta que sigue de una que solo lo parece: aceptar GET y POST, conservar la cadena de consulta y no exigir token CSRF.

Next.js

Dónde: next.config.js

Una entrada en rewrites() de next.config.js. Next.js no quita las cabeceras: las cookies de sus visitantes nos llegan, y no las leemos.

Nuxt

Dónde: nuxt.config.ts

Una regla routeRules con proxy en nuxt.config.ts. Como Next.js, Nuxt no quita las cabeceras de la petición retransmitida.

Express

Dónde: app.js

Una ruta app.all en app.js: retransmite con https.request usando req.originalUrl, nunca el token solo, ya que la cadena de consulta lleva el identificador del clic. Devuelve la cookie puesta y la redirección.

Node (standalone proxy)

Dónde: server.js

Para un sitio sin servidor de aplicación: un pequeño proxy Node en dos archivos, server.js y package.json, que se lanza con npm start. Usa https.request y nunca fetch, que sobrescribe las cabeceras Sec-Fetch: cada visitante parecería una máquina y cada clic se descartaría.

ASP.NET Core

Dónde: Program.cs

Un MapMethods GET y POST en Program.cs: la petición se retransmite con sus cabeceras y la cadena de consulta mediante un cliente de IHttpClientFactory, y la respuesta devuelve la cookie y la redirección.

Laravel

Dónde: routes/web.php

Una ruta Route::match GET y POST en routes/web.php, más una excepción CSRF en bootstrap/app.php: la baliza publica sin token, y sin la excepción Laravel responde 419. La cadena de consulta se retransmite en bruto, porque getQueryString() la reordena.

Ruby on Rails

Dónde: config/routes.rb, más un controlador

Una ruta GET y POST en config/routes.rb y un controlador MerittController con skip_forgery_protection, por la misma razón que en Laravel: la baliza informa con sendBeacon, sin token.

Django

Dónde: urls.py, más una vista

Dos pasos: la ruta en urls.py y la vista en views.py, marcada @csrf_exempt (si no, Django rechaza antes de la vista), que retransmite con requests sin seguir las redirecciones.

Preguntas frecuentes

¿Por qué aceptar POST?

La baliza informa del clic con sendBeacon, que envía un POST. Una ruta que solo acepta GET deja pasar la redirección y pierde esa señal.

¿Por qué conservar la cadena de consulta tal cual?

Lleva el identificador del clic. Un método que la reordena o la recodifica puede perderlo.

¿Después de añadir la ruta?

Reinicie la aplicación, vuelva a desplegarla y lance la comprobación en Meritt.

Y después

Gratis hasta su primera comisión. No se pide tarjeta.