Shopify n'imprime pas. L'admin peut vous afficher une commande et votre navigateur peut envoyer cette page à une imprimante, mais rien dans Shopify ne pousse un ticket vers une machine en cuisine ou en entrepôt de lui-même. L'application officielle Order Printer est un moteur de gabarits avec un bouton Imprimer : il faut toujours une personne.
Réponse courte : une commande devient un ticket imprimé quand quelque chose écoute le webhook orders/create ou orders/paid de Shopify et le transmet à une imprimante joignable depuis internet. On y arrive avec un connecteur prêt à l'emploi, avec Shopify Flow, ou avec quinze lignes de code. Ce guide couvre les trois et, plus utile, les cas où chacun casse.
Les trois approches
| Approche | Mise en place | Code nécessaire | Mise en page | Adapté à |
|---|---|---|---|---|
| Connecteur | Quelques minutes | Non | Basée sur un gabarit | Marchands, agences qui livrent vite |
| Shopify Flow | ~30 min | Non | Limitée au payload construit | Boutiques utilisant déjà Flow, règles conditionnelles |
| Votre propre webhook | Une heure | Oui | Totale | Logique métier, routage multi-sites |
Aucune de ces approches n'exige d'ordinateur dans la boutique, à condition que l'imprimante maintienne sa propre connexion internet : imprimante cloud 4G/Wi-Fi/Ethernet, ou imprimante USB existante derrière un adaptateur Raspberry Pi.
1. La voie du connecteur
Le chemin le plus rapide est le connecteur Shopify : vous autorisez l'application sur votre boutique, choisissez quelle imprimante reçoit quelles commandes, et ajustez le gabarit du ticket. Les commandes s'impriment à leur paiement. La procédure détaillée est dans la documentation d'intégration Shopify.
C'est la bonne réponse pour la majorité des marchands et pour les agences qui doivent mettre une boutique en production cette semaine. Sa limite est la mise en page : vous obtenez un bon ticket par défaut et des réglages de gabarit, pas une logique arbitraire.
2. Shopify Flow
Si votre boutique utilise déjà Flow, vous pouvez déclencher l'impression sans en sortir :
- Déclencheur : Order created (ou Order paid : voir plus bas).
- Condition facultative : n'imprimer que les commandes au-dessus d'un montant, d'un point de vente, ou contenant un produit donné.
- Action : Send HTTP request vers l'endpoint d'impression, avec le texte du ticket construit depuis les variables Flow.
Flow vaut le détour quand la décision d'imprimer est conditionnelle : une imprimante pour le retrait, une autre pour la livraison, aucune pour les commandes 100 % numériques. Il ne le vaut pas quand vous voulez simplement imprimer toutes les commandes : le connecteur le fait avec moins à maintenir.
3. Votre propre webhook
Contrôle total, et moins de code qu'on ne l'imagine. Enregistrez un webhook sur orders/paid, puis dans votre handler :
// POST /webhooks/shopify/orders-paid
export default async function handler(req, res) {
const order = req.body;
const lignes = [
`COMMANDE ${order.name}`,
new Date(order.created_at).toLocaleString('fr-FR'),
'',
...order.line_items.map(i => `${i.quantity}x ${i.title}`),
'',
`TOTAL : ${order.total_price} ${order.currency}`,
];
await fetch(
`https://www.expedy.fr/api/v2/printers/${process.env.PRINTER_UID}/print`,
{
method: 'POST',
headers: {
Authorization: `${process.env.API_SID}:${process.env.API_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
printer_msg: lignes.join('\n'),
origin: `shopify-${order.id}`,
}),
},
);
res.status(200).end();
}
Deux détails de cet extrait comptent plus que le reste.
orders/paid, pas orders/create. orders/create se déclenche avant la capture du paiement. Imprimez dessus et vous imprimerez les commandes dont l'autorisation échoue, plus chaque brouillon créé par vos équipes. Sauf si vous voulez délibérément les commandes impayées sur papier, orders/paid est le bon déclencheur.
origin porte l'identifiant de commande. Shopify réessaie les webhooks, et un réessai après timeout signifie que la même commande arrive deux fois. Passer une valeur stable dans origin vous donne une clé pour détecter et écarter le doublon avant de l'imprimer.
Les pannes que personne n'annonce
Les tickets en double. Shopify considère un webhook en échec si vous ne répondez pas en cinq secondes. Si vous imprimez puis répondez, un appel d'impression lent devient deux tickets. Répondez 200 d'abord, imprimez ensuite de façon asynchrone.
Émojis et caractères spéciaux. Les imprimantes thermiques parlent ESC/POS, pas Unicode. Un intitulé de produit contenant un émoji ou un glyphe inhabituel peut produire du charabia ou, sur certains modèles, faire tomber la connexion. Nettoyez ou translittérez avant l'envoi : c'est de loin la première cause des signalements « l'imprimante ne marche plus ».
La largeur du papier. Un rouleau 80 mm tient environ 42 caractères par ligne en taille standard. Les intitulés longs se coupent d'une façon qui rend le ticket illisible dans le coup de feu. Tronquez délibérément plutôt que de laisser l'imprimante décider.
L'imprimante hors ligne. Quelqu'un la débranche, le rouleau se termine, le routeur redémarre. Décidez à l'avance si un travail non livrable doit être mis en file, réessayé ou remonté en alerte. Vérifier l'état de livraison et alerter, c'est dix minutes de développement qui évitent toute une famille d'incidents « on n'a jamais reçu la commande ».
Mettre en forme le ticket
Titres en gras, logo, QR code vers la commande, code-barres, découpe automatique : tout cela se balise dans printer_msg. La référence de mise en page liste les balises ; l'impression de logos et les QR codes couvrent les deux ajouts les plus demandés.
Par où commencer
Si vous gérez une boutique et voulez les commandes sur papier aujourd'hui, installez le connecteur et arrêtez de lire. Si vous routez des commandes entre plusieurs sites ou avez besoin d'une logique propre, écrivez le webhook : c'est un après-midi, pas un projet. Dans les deux cas, créez un compte gratuit et imprimez un ticket de test avant de toucher à la production : le plan gratuit couvre assez de requêtes pour valider toute la chaîne.
FAQ
Shopify peut-il imprimer les commandes automatiquement sans application ?
Uniquement si vous écrivez l'intégration vous-même : enregistrez un webhook orders/paid et transmettez la commande à un endpoint d'impression. Shopify ne pousse jamais vers une imprimante, et l'application Order Printer exige toujours qu'une personne clique.
Faut-il un ordinateur dans la boutique ?
Non, à condition que l'imprimante maintienne sa propre connexion internet. Une imprimante cloud en 4G, Wi-Fi ou Ethernet se connecte seule ; une imprimante USB existante peut faire de même derrière un adaptateur Raspberry Pi.
Faut-il utiliser orders/create ou orders/paid ?
orders/paid dans presque tous les cas. orders/create se déclenche avant la capture du paiement, et imprime donc aussi les autorisations échouées et les brouillons créés par les équipes.
Pourquoi certaines commandes s'impriment-elles deux fois ?
Shopify réessaie un webhook quand votre endpoint ne répond pas en cinq secondes. Répondez 200 immédiatement et imprimez de façon asynchrone, et passez l'identifiant de commande dans le champ origin pour détecter les doublons.
Peut-on imprimer sur des imprimantes différentes selon le point de vente ?
Oui. Chaque imprimante a son propre printer_uid : le routage revient à choisir l'uid en fonction du point de vente, du mode de livraison ou des articles de la commande avant l'appel.