Skip to main content
Au lieu d’interroger régulièrement l’API pour connaître le statut d’un panier, vous pouvez fournir une webhookUrl lors de sa création. Maketou envoie alors une requête POST vers cette URL lorsque le statut du panier change.

Activer le webhook

Ajoutez le champ webhookUrl dans le body de la création de panier :
L’URL doit être absolue et utiliser le protocole http ou https. Utilisez une URL https accessible publiquement. La webhookUrl est propre à chaque panier. Vous pouvez donc utiliser une URL différente selon le panier, par exemple pour transmettre un identifiant dans la query string.

Événements notifiés

Un panier en payment_failed peut ensuite passer en completed, par exemple lorsque le prestataire de paiement confirme le paiement en retard. Vous recevez alors une nouvelle notification avec le statut completed. Les paniers abandoned ne sont pas notifiés.

Body de la requête

Le body est identique à la réponse de Vérifier un panier (GET /api/v1/stores/cart/{cartId}) :
Le body reflète l’état du panier au moment de l’envoi. Utilisez le champ status pour décider de l’action à mener, et meta pour retrouver la commande correspondante dans votre système (voir Métadonnées).

Répondre à la notification

Répondez avec un code HTTP 2xx dès réception. Traitez la notification de manière asynchrone si votre traitement est long. Si votre serveur ne répond pas en 2xx, Maketou renvoie la notification jusqu’à 2 fois, après environ 30 secondes puis 60 secondes. Au-delà, la notification est abandonnée. Vous pouvez toujours récupérer le statut avec Vérifier un panier.
Vous pouvez recevoir plusieurs notifications pour un même panier. Rendez votre traitement idempotent : ne livrez le produit qu’une seule fois, même si vous recevez completed plusieurs fois.

Vérifier la signature

Chaque notification est signée par Maketou. Vérifiez la signature avant de traiter la notification, pour vous assurer qu’elle provient bien de Maketou et que son contenu n’a pas été modifié.

Header de signature

  • t : timestamp Unix (en secondes) au moment de l’envoi.
  • v1 : signature Ed25519, encodée en base64.

Récupérer la clé publique

Cet endpoint est public et ne nécessite pas de clé API. La clé est la même pour toutes les boutiques : vous pouvez la récupérer une fois et la stocker dans votre configuration.

Reconstruire le message signé

Le message signé est <t>.<JSON canonique du body> :
  • <t> est la valeur t du header ;
  • le JSON canonique est le body sérialisé avec les clés de chaque objet triées par ordre alphabétique, sans espaces ni retours à la ligne.
Parsez le body JSON reçu, puis sérialisez-le de nouveau en JSON canonique. Ne signez pas le body brut tel que reçu : son formatage peut différer.

Exemple en Node.js

Ici, body est le body JSON déjà parsé, par exemple req.body avec Express et express.json().
Le timestamp t fait partie du message signé. Rejetez les notifications trop anciennes (par exemple plus de 5 minutes) pour vous protéger contre le rejeu d’une requête interceptée.

Bonnes pratiques

  • Vérifiez toujours la signature avant de traiter une notification.
  • Ne livrez le produit que sur completed, comme pour la vérification par l’API.
  • Rendez votre traitement idempotent : un même panier peut être notifié plusieurs fois.
  • Gardez une solution de repli : si vous n’avez pas reçu de notification, vérifiez le statut avec Vérifier un panier, en respectant les limites de fréquence.