Meritt Commencer

Toutes les plateformes

Le suivi d'affiliation dans votre application

Si votre site est une application, la règle peut y vivre : une route sur votre préfixe de suivi, qui relaie la requête vers nous et rend la réponse. Trois détails font la différence entre une route qui suit et une route qui a l'air de suivre : accepter GET et POST, garder la chaîne de requête, et ne pas exiger de jeton CSRF.

Next.js

Où : next.config.js

Une entrée dans rewrites() de next.config.js. Next.js ne retire pas les en-têtes : les cookies de vos visiteurs nous parviennent, et nous ne les lisons pas.

Nuxt

Où : nuxt.config.ts

Une règle routeRules avec proxy dans nuxt.config.ts. Comme Next.js, Nuxt ne retire pas les en-têtes de la requête relayée.

Express

Où : app.js

Une route app.all dans app.js : elle relaie par https.request avec req.originalUrl, jamais le jeton seul, puisque la chaîne de requête porte l'identifiant du clic. Elle rend le cookie posé et la redirection.

Node (standalone proxy)

Où : server.js

Pour un site sans serveur applicatif : un petit proxy Node en deux fichiers, server.js et package.json, à lancer par npm start. Il utilise https.request et jamais fetch, qui écrase les en-têtes Sec-Fetch : chaque visiteur passerait pour une machine et chaque clic serait écarté.

ASP.NET Core

Où : Program.cs

Un MapMethods GET et POST dans Program.cs : la requête est relayée avec ses en-têtes et la chaîne de requête par un client de IHttpClientFactory, et la réponse rend le cookie et la redirection.

Laravel

Où : routes/web.php

Une route Route::match GET et POST dans routes/web.php, plus une exception CSRF dans bootstrap/app.php : la balise poste sans jeton, et sans cette exception Laravel répond 419. La chaîne de requête est relayée brute, parce que getQueryString() la réordonne.

Ruby on Rails

Où : config/routes.rb, plus un contrôleur

Une route GET et POST dans config/routes.rb et un contrôleur MerittController avec skip_forgery_protection, pour la même raison que Laravel : la balise annonce par sendBeacon, sans jeton.

Django

Où : urls.py, plus une vue

Deux étapes : la route dans urls.py, puis la vue dans views.py, marquée @csrf_exempt — sans quoi Django refuse avant la vue — qui relaie avec requests sans suivre les redirections.

Questions fréquentes

Pourquoi accepter POST ?

La balise annonce le clic par sendBeacon, qui envoie un POST. Une route qui n'accepte que GET laisse passer la redirection et perd ce signal.

Pourquoi garder la chaîne de requête telle quelle ?

Elle porte l'identifiant du clic. Une méthode qui la réordonne ou la réencode peut le perdre.

Après avoir ajouté la route ?

Redémarrez l'application, redéployez-la, puis lancez la vérification dans Meritt.

Et ensuite

Gratuit jusqu'à votre première commission. Aucune carte demandée.