← Revenir aux principes généraux de l'intégration
Documentation technique d’intégration de ZEROSIX dans un logiciel de caisse
Ce document précise quels sont les appels API à utiliser afin d’intégrer ZEROSIX à un logiciel de caisse ainsi que des points de précisions nécessaires au bon fonctionnement de l’intégration.
Protocole d'intégration
L’intégration se fait sur la base de l’API Rest de ZEROSIX et d’appels HTTP sécurisés, authentifiés, formatés en JSON et encodés en utf-8.
L’authentification des appels API se fait grâce à une clé API que ZEROSIX fourni, qui identifie de manière unique un établissement particulier. Le logiciel qui nous intègre doit donc pouvoir stocker cette clé et l’utiliser dans chacun des appels effectués.
Les headers des appels contiennent obligatoirement :
'Authorization: Token YOUR-API-KEY'
'Content-Type: application/json'
'User-Agent: Software/Version'
YOUR-API-KEY |
La clé API fournie par ZEROSIX. |
Software/Version |
Le nom de votre logiciel / la version de votre logiciel. |
Identification du client
L’identification du client se fait via le mobile uniquement. Le mobile est obligatoire et unique, il ne peut pas y avoir plusieurs clients avec le même mobile. L’identification doit se refaire à chaque fois qu’un client est sélectionné sur le logiciel de façon à obtenir les dernières informations à jour.
Si aucun client n’est trouvé, une code statut 404 sera retourné.
Afin d’identifier le client il faut appeler le endpoint suivant :
GET "https://api.zerosix.com/members/{mobile}
"
La réponse sera de cette forme :
{ "card_url": "https://api.zerosix.com/cards/XXXXXXX/", "card": { "url": "https://api.zerosix.com/cards/XXXXXXX/", "id": "xxxx", "reference": "xxxx", "creation_date": "2024-12-09T15:11:57+01:00", "owner_info": "J. Doe / Programme Etudiant", "dashboard_url": "https://pro.zerosix.com/xxx/clients/xxxx#/customer/xxxx", "points_balance": "0.00", "points_total": "0.0", "statutory_info": null, "contact": { "url": "https://api.zerosix.com/contacts/xxxx/", "mobile": "+336xxxxxxxx", "first_name": "John", "last_name": "Doe", "email": null, "card": "https://api.zerosix.com/cards/xxxx/" }, "available_vouchers": [ { "url": "https://api.zerosix.com/vouchers/xxxx/", "name": "Code promo test 5€", "value": "5.00", "unit": "Euros", "unit_display": "€", "code": "xxxx", "expiration_date": "2025-12-10T23:59:59", "external_id": null, "external_ids": [], "minimum_amount": null } ], "program_info": { "program_type": "CYCLE", "program_description": "", "dashboard_url": "https://pro.zerosix.com/xxxx/clients/xxxx#/customer/xxxx", "program_name": "Programme Etudiant", "program_id": "xxxx" }, "has_available_menu_rewards": false, "customer_screen_url": null, "sponsor_code": "xxxx", "latent_points_balance": "0", "terms_accepted": true }, "member_summary": "John Doe\nProgramme de fidélité : Programme Etudiant\nSolde : 0 point" } |
Les éléments qui doivent être obligatoirement traités sont marqués en bleu :
- owner_info : Champ construit à partir du nom, prénom, programme de fidélité et statut du client. Ces informations sont totalement dépendantes de la configuration ZEROSIX de l’enseigne et peuvent donc varier à tout moment. C’est pour cette raison qu’il est important d’utiliser ce champ construit par ZEROSIX. Il devra être affiché sur la caisse une fois le client identifié.
- url : L’url de la carte utilisée lors de la transmission de la vente. Ne doit surtout pas être stockée car elle peut changer à tout moment, seulement le mobile doit être utilisé pour identifier le client.
- points_balance : Le nombre de points disponibles sur la carte de fidélité.
- terms_accepted : Indique si le client a accepté les conditions générales d’utilisation. Si ce n’est pas le cas, il faut l’indiquer quelque part sur la caisse afin que le vendeur puisse prévenir le client que s’il veut bénéficier de ses avantages il doit les accepter. De plus, la carte sera supprimée au bout de 90 jours si les conditions ne sont pas acceptées.
- available_vouchers : La liste des codes promos disponibles pour le client. Il existe trois types de codes : €, % et produit offert, le type de code est indiqué dans “unit”. Pour les codes € et % la valeur est indiquée dans “value”. Si un minimum d’achat est configuré pour le code, il sera indiqué dans “minimum_amount”. Enfin, pour les codes promos de type produit offert, la liste des ids de produits sélectionnables est indiquée dans “external_ids”, cette liste représente les ids des produits dans le logiciel de caisse et est configurée côté ZEROSIX.
Un élément non obligatoire mais intéressant si possible de l’afficher :
- dashboard_url : Lien vers la fiche client du tableau de bord ZEROSIX. Il permet au vendeur d’effectuer des opérations occasionnelles, comme par exemple faire une migration de programme de fidélité vers un programme plus avantageux (étudiant, entreprise,…)
Création du client
Si aucun client n’est retourné lors de l’identification, alors il faudra le créer.
Afin de créer le client il faut appeler le endpoint suivant :
POST "https://api.zerosix.com/contacts/"
Le payload sera à minima de cette forme :
|
Il est possible de remplir d’autres champs facultatifs, la liste complète est disponible sur la documentation API.
Si une carte existe déjà avec ce numéro de téléphone, alors un code statut 409 sera renvoyé.
Si la création s'est bien passée, la réponse sera de cette forme :
{ "url": "https://api.zerosix.com/contacts/{contact_id}/", "mobile": "+33700000008", "first_name": "John", "last_name": "Doe", "birth_date": null, "gender": null, "address1": null, "address2": null, "zipcode": null, "city": null, "country": "France", "email": null, "opt_out": false, "allow_email": false, "allow_pdf": false, "card": { "url": "https://api.zerosix.com/cards/{card_id}/", "reference": "{card_id}", "points_balance": 0, "owner_info": "J. Doe / Standard", "program_info": { "program_id": XXXX, "program_name": "Standard", "program_type": "CYCLE", "program_description": "", "dashboard_url": "https://pro.zerosix.com/xxxx/clients/xxxx#/customer/xxxx" }, "sponsor_code": "XWP1Z5Z", "latent_points_balance": "0", "terms_accepted": false }, "available_vouchers": [], "dashboard_url": "https://pro.zerosix.com/xxxx/clients/xxxx#/customer/xxxx", "custom_fields": [] } |
Création de la vente
Une fois que la vente est validée sur le logiciel, il faut l’envoyer avec le endpoint suivant :
POST "https://api.zerosix.com/visits/"
Le payload sera de cette forme :
{ "card": "https://api.zerosix.com/cards/{card_id}/", "reference": "XXXXXXXXXXXXx", "date": "YYYY-MM-JJ HH:MM:SS", "price": "95", "details": { "items": [ { "reference": "ABC", "name": "Product Name", "category": "XYZ", "unit_price": "50", "quantity": "2", "total_price": "100" }, { "reference": "DEF", "name": "Code promo 5€", "unit_price": "-5", "quantity": "1", "total_price": "-5" } ] }, "used_vouchers": [ "https://api.zerosix.com/vouchers/{voucher_code}/" ] } |
- card : url de la carte récupérée lors de l’identification/création du client
- reference : référence de la vente unique sur le logiciel. Permet de dédoublonner les ventes en cas d’appels doublés.
- date : date sous la forme “YYYY-MM-JJ HH:MM:SS” à laquelle la vente a été clôturée. Si cette date n’est pas renseignée ZEROSIX attribuera la date et heure de réception de la vente.
- details : liste des articles de la vente. Pour chaque article il est important de mentionner la référence unique de l’article dans le logiciel, la catégorie, le nom, la quantité, le prix unitaire et le prix total.
- used_vouchers : liste des vouchers utilisés, est utilisée pour griller ces vouchers.
💡 Points importants sur les items dans le cas de l’utilisation de vouchers :
- Si un voucher de type remise (en valeur ou en pourcentage) est utilisé, alors le montant déduit doit être répercuté sur la somme des items de la vente. Il y a deux moyens d’y parvenir :
- Ajouter un item supplémentaire au prix négatif correspondant à celui du voucher
- Ventiler la valeur déduite du voucher proportionnellement au prix de chaque article.
Exemple pour une vente de 45€ avec utilisation d’un voucher de 10 € :
Détails du panier avant remise
Ligne 1 : total = 10 €
Ligne 2 : total = 20 €
Ligne 3 : total = 15 €
Détails du panier après remise
Ligne 1 : total = 10 € - (10/45 * 10 €)
Ligne 2 : total = 20 € - (20/45 * 10 €)
Ligne 3 : total = 15 € - (15/45 * 10 €)
- Si un voucher en valeur et un voucher en pourcentage sont utilisés sur la même vente, nous préconisons de favoriser le commerçant, c’est donc le voucher en valeur qui doit être appliqué en premier.