Features
Connecteurs Plateformes
Le module Connectors permet la synchronisation bidirectionnelle avec 14 plateformes e-commerce, marketplaces et ERP.
Plateformes supportees
E-commerce
| Plateforme | Auth | Specificites |
|---|---|---|
| Shopify | REST Admin API 2024-01 | HMAC webhook, GraphQL bulk |
| WooCommerce | Basic Auth | Batch 100/req |
| Magento 2 | Bearer Token | MSI stock multi-source |
| BigCommerce | X-Auth-Token + V3 | GTIN natif |
| Sylius | JWT + API Platform | Prix en centimes |
| Squarespace | Bearer Token | Stock delta |
| WiziShop | API Key | Polling uniquement |
Marketplaces
| Plateforme | Auth | Specificites |
|---|---|---|
| Amazon SP-API | OAuth2 + STS | Listings, stock, prix |
| CDiscount | Login + Password | Offres par EAN |
| Fnac | shop_id + api_key | Offres EAN/ISBN |
| Mirakl | API Key | Multi-marketplace |
| Google Merchant Center | OAuth2 | Content API, feed XML |
Enterprise
| Plateforme | Auth | Specificites |
|---|---|---|
| SFCC (Salesforce) | OAuth2 + OCAPI v24.5 | Token cache |
| SAP Commerce | OAuth2 + OCC v2 | Hybris |
Architecture
Pattern ABC (Abstract Base Class)
Chaque connecteur implemente l'interface PlatformConnector :
class PlatformConnector(ABC):
@abstractmethod
async def push_products(self, products: list[ProductPushPayload]) -> SyncResult: ...
@abstractmethod
async def pull_products(self, since: datetime | None) -> list[dict]: ...
@abstractmethod
async def push_stock(self, updates: list[StockUpdate]) -> SyncResult: ...
@abstractmethod
async def push_prices(self, updates: list[PriceUpdate]) -> SyncResult: ...
@abstractmethod
async def validate_credentials(self) -> bool: ...
Registry
Le PLATFORM_REGISTRY centralise les 14 connecteurs avec chargement paresseux (lazy-loaded) :
- Chaque plateforme definit un
config_schema(champs requis, types, validation) - Categorie :
e-commerce,marketplace,enterprise - Documentation auto-generee par
doc_generator.py
Securite des credentials
Les identifiants sont chiffres avec Fernet (AES-128-CBC) :
- Cle de chiffrement :
SECRET_ENCRYPTION_KEY(variable d'environnement obligatoire) - Stockage : colonne JSONB
credentialsdansPlatformConnectorModel(db_core) - Dechiffrement uniquement au moment de l'appel API
La variable SECRET_ENCRYPTION_KEY est obligatoire en production. Sans elle, les credentials ne sont pas chiffres.
Validation SSRF
Toutes les URLs externes sont validees avant connexion :
- Resolution DNS + verification IP (pas d'IP privee/loopback)
- Whitelist de ports autorises (80, 443)
- Fonction :
validate_external_url()dansapi/core/url_validator.py
Verification des webhooks
Les webhooks entrants sont verifies selon la plateforme :
| Plateforme | Methode |
|---|---|
| Shopify | HMAC-SHA256 base64 |
| WooCommerce | HMAC-SHA256 |
| BigCommerce | Token statique |
| Magento | Basic Auth (fail-closed) |
Tous les webhooks sont fail-closed : si la verification echoue, le webhook est rejete (HTTP 401).
Synchronisation automatique
Celery Beat
| Tache | Frequence | Queue |
|---|---|---|
sync-push-stock | Horaire | connectors |
sync-push-prices | Quotidien | connectors |
sync-pull-products | Configurable | connectors |
Flux de synchronisation
- Push produits : chunks de 100 produits, retry avec backoff exponentiel
- Push stock : delta uniquement (stock modifie depuis dernier sync)
- Push prix : prix modifies depuis dernier sync
- Pull produits : import incremental depuis
last_sync_at
Les jobs sont traces dans PlatformSyncJobModel avec statut, duree, nombre de produits traites et erreurs.
Configuration frontend
La page /settings/integrations affiche les plateformes par categorie (e-commerce / marketplace / enterprise) avec :
- Grille de cartes avec logo et statut de connexion
- Page detail par plateforme avec 3 onglets : Config, Sync, Historique
- Test de connexion en un clic
Endpoints API
| Methode | Endpoint | Description |
|---|---|---|
| GET | /api/v1/connectors/ | Liste des connecteurs configures |
| POST | /api/v1/connectors/ | Creer un connecteur |
| PATCH | /api/v1/connectors/{id} | Modifier un connecteur |
| DELETE | /api/v1/connectors/{id} | Supprimer un connecteur |
| POST | /api/v1/connectors/{id}/test | Tester la connexion |
| POST | /api/v1/connectors/{id}/sync/push | Lancer un push produits |
| POST | /api/v1/connectors/{id}/sync/pull | Lancer un pull produits |
| GET | /api/v1/connectors/{id}/jobs | Historique des syncs |