node-envoimoinscher
Client pour le service EnvoiMoinsCher (http://www.envoimoinscher.com).
Le module traduit le XML de l'API d'EnvoiMoinsCher en JSON.
Installation
$ npm install node-envoimoinscher
Utilisation
Avant toute chose, l'identifiant, le mot de passe et une clé d'API sont nécessaires à l'authentification auprès d'EnvoiMoinsCher. La clé d'API est à demander par mail.
Ces information sont nécessaires à l'initialisation du module:
var emc = require("node-envoimoinscher")({
username: "...",
password: "...",
key: "...",
environment: "..."
});
La propriété environment
est optionnelle et peut prendre deux valeurs "prod"
et "test"
. La valeur par défaut est "test"
.
Généralités
callback
suit la convention habituelle de Node.js, c'est à dire qu'il attend deux arguments :
err
: (object) objet de typeError
s'il existe une erreur, sinonnull
.data
: (json) réponse de l'API convertie en JSON s'il n'y a pas d'erreur, sinonnull
.
conf
, callback
)
emc.quotation(Obtient l'ensemble des offres possibles ainsi qu'un récapitulatif de la demande.
conf
: (json) contient les informations nécessaires à la demande de cotations.
Exemple:
{
"courriers": [{ // (array) une collection d'objets représentant l'envoi
"type": "colis", // (string) type d'envoi: "pli", "colis", "encombrant", "palette"
"hauteur": 10, // (int) la hauteur, ne pas renseigner si le courrier est un "pli"
"largeur": 11, // (int)
"longueur": 12, // (int)
"poids": 13, // (int)
"valeur": 14 // (number) en euros
}],
"code_contenu": 80100, // (int) id obtenu via emc.contentsByCategory(), par exemple
"destinataire": {
"pays": "FR", // (string) code ISO du pays via emc.countries(), par exemple
"code_postal": "75001", // (string)
"type": "entreprise" // (string) type d'interlocuteur: "particulier", "entreprise"
},
"expediteur": {
"pays": "FR",
"code_postal": "13001",
"type": "entreprise"
},
"collecte": "2014-10-02", // (string) date au format ISO YYYY-MM-DD
"delai": "aucun" // (string) le tri de la réponse dépend de sa valeur: "aucun", "minimum", "course"
}
Exemple:
emc.quotation(conf, function(err, data){
if(err) return console.log(err);
return console.log(data);
});
Extrait de réponse: Il est possible voir à quoi ressemble une réponse dans quotation_response.json.
conf
, callback
)
emc.order(Effectue la commande et récupère l'objet retourné par EnvoiMoinsCher.
conf
: (json) contient les informations nécessaires à la soumission d'une commande. C'est un objetconf
de cotation étendu.
Exemple:
{
"courriers": [{
"type": "colis",
"hauteur": 10,
"largeur": 10,
"longueur": 10,
"poids": 1,
"valeur": 0,
"description": "Du vide."
}],
"code_contenu": 80100,
"destinataire": {
"adresse": "1 rue de Rivoli",
"civilite": "M.",
"code_postal": "75001",
"email": "[email protected]",
"nom": "Morin",
"pays": "FR",
"prenom": "Bernard",
"type": "particulier",
"ville": "Paris",
"tel": "06060606060"
},
"expediteur": {
"adresse": "1 avenue de la Canebière",
"civilite": "M.",
"code_postal": "13001",
"email": "[email protected]",
"nom": "Dusse",
"pays": "FR",
"prenom": "Jean-Claude",
"societe": "bitbucket", // (string) si la partie prenante est de type "entreprise"
"type": "entreprise",
"ville": "Marseille",
"tel": "06060606060"
},
"collecte": "2014-10-02",
"delai": "aucun",
"operateur": "UPSE",
"service": "Express",
"disponibilite": {
"HDE": "11:00", // (string) au format ISO hh:mm
"HLE": "19:00"
}
}
Exemple:
emc.order(conf, function(err, data){
if(err) return console.log(err);
return console.log(data);
});
Extrait de réponse: Il est possible voir à quoi ressemble une réponse dans order_response_ok.json.
quotation
)
emc.find(Rend les offres d'une cotation requêtable. Les méthodes mises à la chaîne rendent la requête facilement lisible et sont exécutées dans l'ordre.
L'exemple suivant retourne cinq offres de l'opérateur UPSE (UPS) classé dans le sens alphabétique contraire:
emc.
find(data).
where("operator").
is("UPSE").
orderBy("service").
desc().
limitTo(5).
then(function(offers){
offers.forEach(function(elt){
console.log(elt.service.label);
});
});
data
).where(type
).is(value
)
emc.find(Ces deux méthodes doivent être utilisées de pair.
type
: (string) peut prendre pour valeur"collection"
,"delivery"
,"mode"
,"operator"
,"service"
value
: (string) peut prendre différentes valeur selon le filtre associécollection
:"COMPANY"
,"DROPOFF_POINT"
,"HOME"
,"POST_OFFICE"
delivery
:"COMPANY"
,"HOME"
,"PICKUP_POINT"
mode
:"COM"
,"SYN"
operator
: (string) libre, correspond au code de l'opérateur, par exemple"USPE"
service
: (string) libre, correspond au code du service, par exemple"ExpressNational18H"
data
).orderBy(type
)
emc.find(Permet d'ordonner les offres par type
.
data
).desc()
emc.find(Permet d'inverser l'ordre des offres.
data
).limitTo(limit
)
emc.find(Permet de imiter le nombre de résultats.
limit
: (int)
data
).then(callback
)
emc.find(Exécute le callback (function), return() et when() ne peuvent pas être utilisées ensemble.
callback
ne prend qu'un seul argument:
offers
: (array) collection d'offres.
data
).return()
emc.find(Retourne la collection d'offres (array), return() et when() ne peuvent pas être utilisées ensemble.
Exemple:
var offers = emc.
find(data).
where("operator").
is("UPSE").
orderBy("service").
desc().
limitTo(5).
return();
callback
)
emc.countries(Obtient la liste complète des pays.
Exemple:
emc.countries(function(err, data){
if(err) return console.log(err);
return console.log(data);
});
Extrait de réponse:
{
"countries": {
"country": [
{
"code": "P1",
"label": "ACORES (PORTUGAL)"
},
{
"code": "AF",
"label": "AFGHANISTAN"
},
// ...
]
}
}
callback
)
emc.categories(Obtient la liste complète des catégories de contenus possibles.
Exemple:
emc.categories(function(err, data){
if(err) return console.log(err);
return console.log(data);
});
Extrait de réponse:
{
"content_categories": {
"content_category": [
{
"code": 10000,
"label": "Livres et documents"
},
{
"code": 20000,
"label": "Alimentation et matières périssables"
},
// ...
]
}
}
callback
)
emc.contents(Obtient la liste complète des contenus possibles.
Exemple:
emc.contents(function(err, data){
if(err) return console.log(err);
return console.log(data);
});
Extrait de réponse:
{
"contents": {
"content": [
{
"code": 100,
"label": "Contenu non spécifié",
"category": 0
},
{
"code": 10100,
"label": "Documents sans valeur commerciale",
"category": 10000
},
{
"code": 10120,
"label": "Journaux",
"category": 10000
},
// ...
]
}
}
id
, callback
)
emc.contentsByCategory(Obtient la liste des contenus d'une catégorie.
id
: (string) référence de la catégorie.
Exemple:
emc.contentsByCategory(80000, function(err, data){
if(err) return console.log(err);
return console.log(data);
});
Extrait de réponse:
{
"contents": {
"content": [
{
"code": 80100,
"label": "Produits culturels : livres, jeux, CD, DVD etc"
},
{
"code": 80200,
"label": "Appareils électroniques, Image et son etc"
},
// ...
]
}
}
id
, [country
,] callback
)
emc.dropoff(Obtient le détail d'un point relais de départ.
id
: (string) référence du point relai.country
: (string) code pays ISO,"FR"
par défaut.
Exemple:
emc.dropoff("SOGP-C3084", function(err, data){
if(err) return console.log(err);
return console.log(data);
});
Extrait de réponse:
{
"dropoff_point": {
"code": "SOGP-C3084",
"name": "STOCK PREMIUM",
"address": "25 RUE RICHARD LENOIR",
"city": "PARIS 11",
"zipcode": 75011,
"country": "FR",
"phone": {},
"description": {},
"schedule": {
"day": [
{
"weekday": 1,
"open_am": "11:00:00",
"close_am": "15:00:00",
"open_pm": "15:00:00",
"close_pm": "20:00:00"
},
// ...
]
}
}
}
id
, [country
,] callback
)
emc.pickup(Obtient le détail d'un point relais d'arrivée.
id
: (string) référence du point relai.country
: (string) code pays ISO,"FR"
par défaut.
Exemple:
emc.pickup("SOGP-C3059", function(err, data){
if(err) return console.log(err);
return console.log(data);
});
Extrait de réponse:
{
"pickup_point": {
"code": "SOGP-C3059",
"name": "PLASTIC SOUL RECORDS",
"address": "93, AVENUE LEDRU ROLLIN",
"city": "PARIS 11",
"zipcode": 75011,
"country": "FR",
"phone": {},
"description": {},
"schedule": {
"day": [
{
"weekday": 1,
"open_am": "$horaire.debut_am",
"close_am": "$horaire.fin_am",
"open_pm": "16:30:00",
"close_pm": "20:00:00"
},
// ...
]
}
}
}