Aller au contenu

La collecte côté serveur

Un serveur, un traitement par lots ou le serveur d’une application mobile peut envoyer ses événements directement, sans navigateur : c’est l’équivalent du Measurement Protocol de Google Analytics. Le cas le plus courant : la commande confirmée par votre serveur, une fois le paiement accepté.

POST https://stats.exemple.fr/collect/server
Authorization: Bearer eoas_…
Content-Type: application/json
{
"events": [{
"type": "event",
"name": "purchase",
"at": "2026-10-04T14:12:00Z",
"visitor": "3f9c0d2e8b7a4c1d9e0f1a2b3c4d5e6f.20260912",
"props": { "transaction_id": "C-2026-10412", "value": 129.9, "currency": "EUR" },
"items": [{ "id": "KA2", "name": "Kerys Air 2", "price": 125, "quantity": 1 }]
}]
}

Dans les Réglages du site, section Clés d’envoi serveur, créez une clé : eoas_….

  • Elle est affichée une seule fois, puis gardée hachée.
  • Elle ne vaut que pour son site, et que pour envoyer : elle ne lit rien.
  • Elle se révoque d’un clic ; sa dernière utilisation est affichée, sa création et sa révocation sont inscrites au journal d’audit.

Gardez-la côté serveur, dans la configuration de votre application.

Un envoi porte jusqu’à 100 événements. Chaque événement :

ChampObligatoireRôle
typeouipageview ou event
namepour eventle nom de l’événement, mêmes règles que track
atnonl’instant, au format ISO 8601 ; 72 heures dans le passé au plus ; maintenant par défaut
url, referrer, titlenonla page concernée
props, itemsnonles propriétés et les articles, comme dans le navigateur
visitornonla valeur du cookie _eoa du visiteur
user_idnonl’identité du visiteur chez vous (si le site accepte les visiteurs connectés)
ip, user_agentnonl’adresse et le navigateur du visiteur, pour le hachage du jour
languagenonla langue du visiteur

Un champ absent s’omet : n’envoyez pas null. Il n’y a ni contrôle d’origine ni filtre de robots : la clé suffit. Le débit est propre à la clé.

Pour que la commande arrive dans la bonne visite — et soit attribuée au bon canal —, le serveur relaie ce qu’il sait du visiteur :

  • en mode cookie de mesure : la valeur du cookie _eoa, que le navigateur envoie avec chaque requête vers votre site ;
  • sinon : l’adresse IP et l’agent utilisateur du visiteur, qui donnent le même hachage du jour que le script. Ils sont oubliés aussitôt, comme partout ailleurs.

Sans l’un ni l’autre, l’événement est rangé sans visiteur (visitor_kind = none).

await fetch('https://stats.exemple.fr/collect/server', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.EODIA_SERVER_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
events: [{
type: 'event',
name: 'purchase',
visitor: req.cookies._eoa, // mode cookie
ip: req.ip, user_agent: req.get('user-agent'),
props: { transaction_id: order.id, value: order.total, currency: 'EUR' },
}],
}),
})
<?php
$event = [
'type' => 'event',
'name' => 'purchase',
'ip' => $_SERVER['REMOTE_ADDR'],
'user_agent' => $_SERVER['HTTP_USER_AGENT'] ?? '',
'props' => ['transaction_id' => $order->id, 'value' => $order->total, 'currency' => 'EUR'],
];
if (isset($_COOKIE['_eoa'])) $event['visitor'] = $_COOKIE['_eoa']; // mode cookie
$body = json_encode(['events' => [$event]]);
$ch = curl_init('https://stats.exemple.fr/collect/server');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('EODIA_SERVER_KEY'), 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => $body,
CURLOPT_RETURNTRANSFER => true,
]);
curl_exec($ch);
import os, requests
event = {
"type": "event",
"name": "purchase",
"ip": request.remote_addr,
"user_agent": request.headers.get("User-Agent", ""),
"props": {"transaction_id": order.id, "value": order.total, "currency": "EUR"},
}
if "_eoa" in request.cookies: # mode cookie
event["visitor"] = request.cookies["_eoa"]
requests.post(
"https://stats.exemple.fr/collect/server",
headers={"Authorization": f"Bearer {os.environ['EODIA_SERVER_KEY']}"},
json={"events": [event]},
timeout=5,
)
Fenêtre de terminal
curl -X POST https://stats.exemple.fr/collect/server \
-H "Authorization: Bearer $EODIA_SERVER_KEY" \
-H "Content-Type: application/json" \
-d '{"events":[{"type":"event","name":"invoice_paid","props":{"value":49,"currency":"EUR"}}]}'

La même clé peut demander l’effacement des données d’une personne, pour brancher les demandes reçues par votre site :

Fenêtre de terminal
curl -X POST https://stats.exemple.fr/collect/server/erase \
-H "Authorization: Bearer $EODIA_SERVER_KEY" \
-H "Content-Type: application/json" \
-d '{"user_id":"client-1042"}'

L’un des deux, user_id ou visitor (la valeur du cookie). Voir les droits des personnes.

eodia analytics est un logiciel libre d’Eodia.