🇬🇧 English version: read it here
Si vous avez déjà développé une boutique en ligne en Algérie, vous connaissez le problème : chaque transporteur a sa propre API.
-
Yalidine : headers
X-API-ID/X-API-TOKEN, wilaya d'origine obligatoire, pagination parpage_size. -
ZR Express :
X-Api-Key+X-Tenant, création qui ne renvoie qu'un UUID, recherche des territoires parPOST. - DHD, Anderson, World Express (plateforme Ecotrack) : token Bearer, paramètres en query string, commandes à valider après création.
- Maystro : pas d'API de suivi du tout, tout passe par webhooks.
Et chacun a ses propres statuts : « En préparation », OrderReceived, 41…
J'ai écrit dz-delivery, un SDK open source (MIT) qui expose la même interface pour tous ces transporteurs, en TypeScript et en PHP.
Installation
npm install @dz-delivery/core # Node.js ≥ 18, zéro dépendance
composer require dz-delivery/sdk # PHP ≥ 8.2
Le mĂŞme code pour chaque transporteur
import { createClient } from '@dz-delivery/core';
const shipping = createClient('yalidine', {
apiId: process.env.YALIDINE_API_ID!,
apiToken: process.env.YALIDINE_API_TOKEN!,
fromWilayaId: 16,
});
// ou : createClient('zrexpress', { apiKey, tenant })
// ou : createClient('ecotrack', { token, courier: 'dhd' })
const quote = await shipping.getFees({ toWilayaId: 31 });
const parcel = await shipping.createParcel({
recipientName: 'Mohamed Amine',
phone: '0550123456',
address: 'Cité 221 lots, n°98',
wilayaName: 'Oran',
communeName: 'Bir El Djir',
productName: 'T-shirt',
price: 2500,
});
const { parcel: current, events } = await shipping.track(parcel.trackingNumber);
console.log(current.status); // 'pending' | 'in_transit' | 'delivered' | 'returned' | ...
En PHP / Laravel, c'est la mĂŞme chose avec ClientFactory::create('yalidine', [...]).
Ce que le SDK gère pour vous
- Wilayas et communes : par code officiel (1–58), par id du transporteur ou par nom. Le SDK les résout avant l'appel.
- Téléphones : normalisés au format attendu par chaque transporteur.
-
Statuts unifiés :
pending,created,in_transit,delivered,returned,cancelled,unknown. La réponse native reste disponible dansraw. -
Erreurs typées :
AUTH_FAILED,VALIDATION_ERROR,NOT_FOUND,RATE_LIMITED… -
Stop desks :
getStopDesks({ wilayaId })pour les bureaux et points relais. - Extras ZR Express : étiquettes PDF, création en masse, vérification des webhooks signés.
Guides par transporteur
Contribuer
Le projet est sur GitHub : https://github.com/developing-off/dz-delivery. Les contributions sont bienvenues, surtout pour ajouter des transporteurs (NoEST, MDM…) ou partager des réponses réelles anonymisées pour renforcer les tests.
Si vous l'utilisez en production, dites-le moi en commentaire 🙏
Top comments (0)