La fonction “api.declare_shipment”¶
Cette fonction permet d'annoncer l'expédition d'un ensemble de colis vers le HUB IMX. Elle sert à contrôler la bonne réception et le traitement des colis. IMX construit et fournit quotidiennement à ses client un "rapport d'arrivage" en croisant les données d'expédition fournies par le client et les données internes de réception et de traitement.
Description de la requête¶
Cette fonction prend trois arguments en paramètre :
username
: fourni par IMX ;password
: fourni par IMX ;data
: dictionnaire de données contenant les données de votre requête.
L'objet data
¶
Les champs notés en gras sont obligatoires. Les champs suffixés par un point sont des membres de dictionnaire (exemple : options
). Les champs suffixés par [] sont des listes (exemple : parcel_content
).
Nom | Description |
---|---|
Dictionnaire donnant des informations sur l'expédition. Contient le champ suivant : | |
declare_parcel , dans le champ tracking_data.imx_tracking_id |
Description de la réponse¶
Le retour de la fonction contient un objet result
contenant les champs suivants :
Nom | Description |
---|---|
ok ou failed selon la bonne exécution de la fonction |
|
statut est failed , descriptif de l'erreur |
|
Exemple¶
import datetime
import requests
URL = "https://webservice.imxpostal.fr/smc/rpc/"
# Données d'identification fournies par IMX.
USERNAME = "..." # fourni par IMX
PASSWORD = "..." # fourni par IMX
ACCOUNT = "..." # fourni par IMX
data = {
"jsonrpc": "2.0",
"method": "api.declare_shipment",
# identifiant de requête. A la convenance du client, pas nécessairement unique.
"id": "__test__",
"params": [
USERNAME,
PASSWORD,
{
"account": ACCOUNT,
"imx_tracking_ids": [9408106, 9408065],
"shipment": {
"name": "shipment-%s" % datetime.date.today(),
}
}
La première exécution du code suivant, lancée le 15 juin 2021, renvoie le résultat suivant :
{
'jsonrpc': u'2.0',
'id': '__test__',
'result': {
'status': 'ok',
'done': [9409196, 9409195],
'already_handled': {},
'invalid': [],
'warnings': None
}
}
Une deuxième exécution, le même jour, renverrait :
{
'jsonrpc': u'2.0',
'id': '__test__',
'result': {
'status': 'ok',
'already_handled': {
'9409195': {
'shipment_name': 'shipment-2021-06-15',
'shipment_ts': '2021-06-15T19:48:51.413'
},
'9409196': {
'shipment_name': 'shipment-2021-06-15',
'shipment_ts': u'2021-06-15T19:48:51.413'
}
},
'done': [],
'invalid': [],
'status': 'ok',
'warnings': [
'Nothing to do. All imx_tracking_ids are invalid or already handled.'
]
}
}
Cross-docking¶
Pour les clients autorisés à faire du cross-docking, il faut rajouter un paramètre carrier
à l'objet shipment
. Les rapamètres sont donc les suivants :
Nom | Description |
---|---|
Dictionnaire donnant des informations sur l'expédition. Contient le champ suivant : | |
La réponse est semblable au cas général, avec un champ additionnel label
contenant le pdf 10x15 cm d'une étiquette à apposer sur le sac ou la palette, encodé en base64.
Exemple¶
data = {
"jsonrpc": "2.0",
"method": "api.declare_shipment",
# identifiant de requête. A la convenance du client, pas nécessairement unique.
"id": "__test__",
"params": [
USERNAME,
PASSWORD,
{
"account": ACCOUNT,
"imx_tracking_ids": [9408106, 9408065],
"shipment": {
"name": "shipment-%s" % datetime.date.today(),
"carrier": "mrw",
}
}
La réponse au premier appel serait
{
'jsonrpc': u'2.0',
'id': '__test__',
'result': {
'status': 'ok',
'done': [9409196, 9409195],
'already_handled': {},
'invalid': [],
'warnings': None,
"label": <base64-encoded pdf>
}
}