Contexte : Aleta, Shopify et les distributeurs
Aleta Distribution Sàrl est une entreprise suisse de distribution. Son catalogue produit vit dans Shopify : articles, variantes, médias et inventaire y sont gérés comme source de vérité opérationnelle.
Les partenaires B2B — autres distributeurs et intégrateurs — ont besoin d'un accès programmatique fiable (prix de référence, stocks, emplacements logistiques) sans exposer les identifiants Admin Shopify ni la complexité du GraphQL à chaque intégration.
d-side solutions a conçu et déployé une API B2B publique servie sous api.aleta.ch, adossée à la boutique Shopify, avec documentation et parcours d'onboarding pour les clients API.
💡 Positionnement technique
Il s'agit d'un middleware Symfony qui traduit les besoins grossistes (REST stable, JSON, périmètres d'accès) en requêtes contrôlées vers l'API GraphQL Admin de Shopify — avec cache, journalisation et surface d'erreur adaptée aux consommateurs API.
Le défi : ouvrir le catalogue sans compromettre Shopify
Donner à plusieurs distributeurs un accès direct à l'Admin API pose des problèmes de sécurité, de gouvernance et de cohérence contractuelle : chaque partenaire négocie des conditions commerciales différentes, et l'API Shopify évolue avec chaque version (champs retirés ou schéma modifié).
- ✗Pas de jeton Admin partagé — remettre la clé Admin à chaque intégrateur multiplie les risques et rend les rotations pénibles.
- ✗Prix catalogue ≠ prix distributeur — il faut appliquer remises ou marges par compte, de façon déterministe et audit-able.
- ✗Drift de version GraphQL — une requête valide hier peut échouer après montée de version si des champs disparaissent du schéma.
- ✗Exploitation serveur — déploiements reproductibles, droits fichiers (écriture de configuration) et logs structurés pour diagnostiquer la prod.
🎯 Objectif
Offrir une surface REST versionnée, des clés API par client avec périmètre (produits, stocks, emplacements), une console d'administration pour gérer les comptes, et une chaîne de mise en production maîtrisée.
La solution : middleware Symfony entre Shopify et les intégrateurs
L'application Symfony 8 sert de passerelle : elle authentifie les appels B2B (en-tête Authorization: Bearer … ou paramètre de requête équivalent), applique les règles tarifaires du client, interroge Shopify via GraphQL Admin, puis renvoie des réponses JSON documentées.
// Flux de données
REST · clé API · scopes
auth · pricing · cache
catalogue · inventaire
Les montants sensibles sont renvoyés en chaînes pour éviter les surprises de précision côté client JSON.
Le dépôt est déployé sur l'infrastructure d-side (git pull, composer install, vidage de cache Symfony) avec un script de déploiement documenté — ce qui standardise les mises en production et réduit les écarts entre environnements.
Incident réel : erreur Shopify en production
Un jour, l'endpoint catalogue renvoyait une erreur générique « Shopify upstream ». Les journaux applicatifs montraient des erreurs GraphQL : des champs (weight, weightUnit sur ProductVariant) n'existaient plus sur la version d'API Admin configurée. La correction a consisté à aligner la sélection GraphQL sur le schéma supporté — rappel utile : toute intégration Shopify doit suivre le cycle de vie des versions.
Exploitation : permissions fichiers
Un second sujet typique est apparu en production : échec d'écriture sur un fichier temporaire de configuration clients lorsque l'utilisateur Unix du serveur web ne correspond pas au propriétaire du déploiement. La résolution passe par des permissions et propriétaires cohérents entre déploiement SSH et runtime Apache — un détail banal mais bloquant pour l'administration des comptes.
Fonctionnalités clés
Surface REST versionnée
Les intégrateurs s'appuient sur des endpoints tels que la vérification de santé, la liste paginée des produits (filtres curseur, SKU, statut), le stock et les emplacements — le tout derrière la même convention d'authentification et des limites de débit configurables par client.
Tarification par client
Le middleware calcule des prix adaptés au compte (par exemple remise sur le prix catalogue et règles complémentaires pour scénarios type livraison directe), à partir des montants Shopify, de façon centralisée et testable.
Console d'administration
Une interface web protégée permet de créer et désactiver des clients, régler les pourcentages et périmètres d'accès, et de communiquer des identifiants d'accès sans jamais exposer le jeton Admin Shopify — chaque partenaire reçoit sa propre clé au format dédié (préfixe type b2b_), à stocker comme tout secret.
Webhooks signés
Un point d'entrée dédié reçoit les notifications Shopify avec contrôle de signature (HMAC), ce qui permet d'ancrer des réactions serveur fiables lorsque le catalogue ou l'inventaire change côté Shopify.
Résultats
- ✓Contrat d'intégration clair — REST JSON, messages d'erreur explicites, documentation publiée sur le même hôte que l'API.
- ✓Shopify reste la source de vérité — pas de duplication manuelle du catalogue dans un second silo.
- ✓Robustesse aux évolutions d'API — ajustement ciblé du schéma GraphQL après incident réel en production.
- ✓Déploiements reproductibles — script Composer documenté pour mettre à jour le code et les dépendances sur le serveur.
En résumé
Pour Aleta, d-side solutions a bâti une couche B2B sobre mais complète au-dessus de Shopify : identités séparées par distributeur, tarification serveur, et discipline d'exploitation pour survivre aux changements de schéma et aux contraintes POSIX.
Le même modèle — middleware métier + API stable + admin léger — s'applique à d'autres marques qui veulent ouvrir leur catalogue à des partenaires sans sacrifier la sécurité Shopify.
Vous distribuez en B2B depuis Shopify et cherchez une API partenaires maîtrisée ? Écrivez-nous.
Luc Demierre
Fondateur & Consultant IT — d-side solutions Sàrl, Bulle
Spécialisé en architecture IT, sécurité des systèmes et intégration e-commerce pour les PME suisses. Fondateur de d-side solutions Sàrl depuis 2022.