Trois lignes pour la navigation, deux appels serveur pour le tunnel.
Dans votre layout Blade (resources/views/layouts/app.blade.php), avant </body> :
resources/views/layouts/app.blade.php
</body>
<script src="https://messagerie.inovertix.com/inotrack.js" data-site="{{ config('services.inotrack.public_key') }}" data-endpoint="{{ config('services.inotrack.endpoint') }}" defer></script>
config/services.php :
config/services.php
'inotrack' => [ 'endpoint' => env('INOTRACK_ENDPOINT', 39;https://messagerie.inovertix.com/api/inotrack'), 'public_key' => env('INOTRACK_PUBLIC_KEY'), // Serveur uniquement : ne JAMAIS l'exposer dans une vue. 'secret' => env('INOTRACK_SECRET_KEY'), ],
Suivre un clic : <button data-inotrack="Ajouter au panier">…</button>.
<button data-inotrack="Ajouter au panier">…</button>
Le navigateur envoie son session_uid (champ caché alimenté depuis le localStorage, clé _inotrk_sid) ; le serveur ajoute les données sensibles et la clé secrète. Le parcours reste ainsi raccroché à la navigation.
session_uid
localStorage
_inotrk_sid
use Illuminate\Support\Facades\Http; Http::withToken(config('services.inotrack.secret')) ->timeout(3) // une mesure ne doit jamais faire attendre un client ->post(config('services.inotrack.endpoint').'/funnel', [ 'session_uid' => $request->input('inotrack_session'), 'step_key' => 'form_validated', 'data' => [ 'phone' => $order->phone, 'city' => $order->city, 'email' => $order->email, 'payment_method' => $order->payment_method, 'amount_total' => $order->total, 'amount_deposit' => $order->deposit, ], ]);
Enveloppez l'appel dans un try/catch ou passez-le en job : INOTRACK est conçu pour ne jamais casser un site client, à vous de ne pas casser le vôtre si le réseau tombe.
try
catch
À chaque changement d'état (expédition, livraison, annulation, remboursement) :
Http::withToken(config('services.inotrack.secret')) ->post(config('services.inotrack.endpoint').'/order-status', [ 'order_ref' => $order->reference, 'status' => $order->status, // « completed », « cancelled », « refunded »… ]);
Lot (200 commandes maximum), pour un rattrapage :
Http::withToken(config('services.inotrack.secret')) ->post(config('services.inotrack.endpoint').'/order-status', [ 'orders' => Order::latest()->take(200)->get() ->map(fn ($o) => ['order_ref' => $o->reference, 'status' => $o->status]) ->all(), ]);
Les statuts « livrés » se déclarent par site dans CONTROL (onglet Réglages) : les modifier reclasse tout l'historique, le taux de livraison reste cohérent.
php artisan tinker >>> Http::get(config('services.inotrack.endpoint').'/ping', ['k' => config('services.inotrack.public_key')])->json();