Introduction
API de synchronisation des données entre l'ERP et Shopify
Authentification
Exemple de authentification:
curl http://127.0.0.1/api/endpoint \
-H 'Accept: application/json' \
-H 'Authorization: Bearer ••••••'
Remplacer
••••••par votre clé d'API.
Passer la clé d'API dans le header de la requête avec le format suivant:
Authorization: Bearer ma_cle_api
Le header Accept: application/json force le format de la réponse en JSON.
Produits
Ajouter et modifier un produit
curl http://127.0.0.1/api/products/upsert \
-X POST \
-H 'Accept: application/json' \
-H 'Authorization: Bearer ••••••'
Exemple de payload
{
"id": "I230647695",
"espece": "ABRICOTIER",
"variete": "CANINO",
"forme": "TIGE HAUTE",
"forme_categorie":"Arbres de plein vent",
"force": "FORCE 1",
"gamme": "SECOND CHOIX",
"prix_ht": 158.181818,
"prix_ttc": 174,
"commentaire": "LEGEREMENT COURBE 150CM",
"photos": [
"base64photo1==",
"base64photo2=="
],
"couleurs": [
"Vert"
],
"saison_cueillettes": [
"Été",
"Automne"
],
"aspect_culinaires": [
"Tarte",
"A croquer"
],
"saveurs": [
"Acidulé"
],
"environnements": [
"Tous types de sol",
"Sol profond"
],
"specificite": "",
"fruit": "Abricot",
"defaut": "",
"description_espece": "",
"categorie": "arbres fruitiers",
"poids": 20000,
"statut": "disponible",
"periode_arrachage": "Hiver"
}
HTTP Request
POST http://127.0.0.1/api/products/upsert
Propriétés
| Paramètre | Description |
|---|---|
| id | ID |
| espece | Espèce |
| variete | Variété |
| forme | Forme |
| forme_categorie | Catégories de le forme ("Arbres de plein vent", "Espaliers"...) |
| force | Force |
| gamme | "" ou "SECOND CHOIX" |
| prix_ht | Prix HT |
| prix_ttc | Prix TTC |
| prix_avant_reduction | Prix TTC avant réduction, affiché en barré |
| commentaire | Commentaire |
| photos | Liste des photos |
| couleurs | Liste des couleurs |
| saison_cueillettes | Liste des saisons de cueillettes |
| aspect_culinaires | Liste des aspects culinaires |
| saveurs | Liste des saveurs |
| environnements | Liste des environnements de culture |
| specificite | Spécificité des petits fruits (Remontant, Non-remontant) |
| fruit | Fruit de l'arbre |
| defaut | Défaut de l'arbre |
| description_espece | Description de l'espece |
| categorie | Catégorie (arbres fruitiers, petits fruits, autre) |
| poids | Poids en gramme |
| statut | Disponibilité du produit (disponible, reserve) |
| periode_arrachage | Période d'arrachage |
Modifier les images d'un produit (variété)
Ce endpoint permet de mettre à jour les images d'une variété qui correspond à un produit.
Pour les images spécifiques à une déclinaison (forme, force) utiliser le endpoint products/upsert
curl http://127.0.0.1/api/products/images \
-X POST \
-H 'Accept: application/json' \
-H 'Authorization: Bearer ••••••'
Exemple de payload
{
"espece": "ABRICOTIER",
"variete": "CANINO",
"forme_categorie":"Arbres de plein vent",
"photos": [
"base64photo1==",
"base64photo2=="
],
}
HTTP Request
POST http://127.0.0.1/api/products/images
Propriétés
| Paramètre | Description |
|---|---|
| espece | Espèce |
| variete | Variété |
| forme_categorie | Catégories de le forme ("Arbres de plein vent", "Espaliers"...) |
| photos | Liste des photos |
Archiver un produit
curl http://127.0.0.1/api/products/archive \
-X POST \
-H 'Accept: application/json' \
-H 'Authorization: Bearer ••••••'
Endpoint pour supprimer un produit
Requête HTTP
POST http://127.0.0.1/api/products/archive
Propriétés
| Paramètre | Description |
|---|---|
| id | ID |
Exemple de payload
{
"id": "I230647695"
}
Lister les stocks
curl http://127.0.0.1/api/products/stocks \
-X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer ••••••'
Récupérer les stocks des produits
Requête HTTP
GET http://127.0.0.1/api/products/stocks
Exemple de réponse
{
"I230662575": 0,
"I230662576": 1,
"I230662580": 0
}
Catégories
Mettre à jour les catégories
curl http://127.0.0.1/api/categories/upsert \
-X POST \
-H 'Accept: application/json' \
-H 'Authorization: Bearer ••••••'
Exemple de payload
{
"categories": [
{
"espece": "ABRICOTIER",
"description": "Abricotier robuste"
}
]
}
HTTP Request
POST http://127.0.0.1/api/categories/upsert
Propriétés
| Paramètre | Description |
|---|---|
| categories | Liste des catégories |
| - espece | Espèce (au même format que dans les produits) |
| - description | Description |
Commandes
Récupérer les commandes
curl http://127.0.0.1/api/orders?from="2024-05-30 10:00:00" \
-H 'Accept: application/json' \
-H 'Authorization: Bearer ••••••'
Endpoint pour récupérer les nouvelles commandes depuis une date donnée
Requête HTTP
GET http://127.0.0.1/api/orders?from=<DATE>
Exemple de réponse
{
"orders": [
{
"shopify_id": 5748587364501,
"numero": 1013,
"articles": [
{
"id": "I230600842",
"shopify_id": "13718966829205",
"nom": "Andre desportes - Jolis Moches - CORDON 1/2 3 ETAGES / FORCE 2 / 1",
"prix": "116.00",
"tva": "10.55",
"tva_pourcent": "10",
"reductions": []
}
],
"articles_rembourses": [],
"client": {
"shopify_id": 7705749946517,
"email": "baptiste@agence-webup.com",
"prenom": "baptiste",
"nom": "test",
"entreprise": null,
"adresse1": "8 Rue Raymond Poincaré",
"adresse2": null,
"ville": "Troyes",
"code_postal": "10000",
"pays": "France",
"telephone": null
},
"adresse_livraison": {
"prenom": "baptiste",
"nom": "test",
"entreprise": null,
"adresse1": "8 Rue Raymond Poincaré",
"adresse2": null,
"code_postal": "10000",
"ville": "Troyes",
"pays": "France",
"telephone": null
},
"adresse_facturation": {
"prenom": "baptiste",
"nom": "test",
"entreprise": null,
"adresse1": "8 Rue Raymond Poincaré",
"adresse2": null,
"code_postal": "10000",
"ville": "Troyes",
"pays": "France",
"telephone": null
},
"mode_reglement": "bogus",
"date_livraison": null,
"frais_expedition_total": "8.80",
"frais_expedition_total_tva": "1.47",
"frais_expedition_total_tva_pourcent": "20",
"total": "124.80",
"total_tva": "12.02",
"traite": false,
"date_creation": "2024-09-18 09:51:31",
"date_modification": "2024-09-18 09:51:32"
}
]
}
Query Parameters
| Paramètre | Description |
|---|---|
| from | Récupére les commandes à partir de cette date au format YYYY-MM-DD HH:MM:SS |
Marquer une commande comme traitée
curl http://127.0.0.1/api/orders/close \
-X POST \
-H 'Accept: application/json' \
-H 'Authorization: Bearer ••••••'
Exemple de payload
{
"shopify_id": 5657239126165
}
HTTP Request
POST http://127.0.0.1/api/orders/close
Propriétés
| Paramètre | Description |
|---|---|
| shopify_id | Id Shopify de la commande |
Divers
Reset de la base de données
Reset base de données de l'API (mais pas celle de Shopify)
curl http://127.0.0.1/api/database/reset \
-X POST \
-H 'Accept: application/json' \
-H 'Authorization: Bearer ••••••'
Requête HTTP
POST http://127.0.0.1/api/database/reset
Propriétés
Aucun paramètre requis
Erreurs
Exemple d'erreur 422
{
"message": "The title field is required. (and 2 more errors)",
"errors": {
"title": [
"The title field is required."
],
"price": [
"The price field is required."
],
"inventory": [
"The inventory field is required."
]
}
}
L'API retourne les erreurs HTTP suivantes
| Code d'erreur | Description |
|---|---|
| 401 | La clé d'API n'est pas valide. |
| 403 | Vous n'avez pas les droits d'accès à la ressource demandée. |
| 404 | La ressource demandée n'a pas été trouvée. |
| 405 | La méthode HTTP utilisée n'est pas supportée. |
| 422 | Le contenu de la requête n'est pas valide. Les erreurs sont retournées dans le corps de la réponse. |
| 500 | Une erreur non prévue est survenue. |