API NoEST en Node.js et PHP

NoEST (NOEST Express) expose une API publique pour ses partenaires e-commerce. Avec dz-delivery, le provider noest parle cette API avec le même code que les autres transporteurs.

Installer

TypeScript · npm
npm install @dz-delivery/core
PHP · Composer
composer require dz-delivery/sdk

Node.js ≥ 18 (aucune dépendance) ou PHP ≥ 8.2 (Guzzle 7). Le même code fonctionne ensuite pour les autres transporteurs : seule la configuration du client change.

Identifiants NoEST

OptionValeurNotes
apiTokenToken API du tableau de bord partenaire NOESTEnvoyé en Authorization: Bearer <token>
userGuidGUID partenaire (même page)Envoyé en user_guid dans chaque POST
autoValidatefalse par défauttrue : valid/order juste après la création

NoEST en TypeScript / Node.js

TypeScript
import { createClient, isShippingError } from '@dz-delivery/core';

const noest = createClient('noest', {
  apiToken: process.env.NOEST_API_TOKEN!,
  userGuid: process.env.NOEST_USER_GUID!,
  autoValidate: true,          // remettre le colis au transporteur tout de suite
});

const desks = await noest.getStopDesks({ wilayaId: 16 });
const quote = await noest.getFees({ toWilayaId: 16 });

try {
  const parcel = await noest.createParcel({
    recipientName: 'Mohamed Amine',
    phone: '0550123456',
    address: 'Cité 221 lots, n°98',
    wilayaId: 16,
    communeName: 'Bab Ezzouar',
    productName: 'T-shirt',
    price: 2500,
    orderId: 'ORDER-1001',
  });

  const { parcel: current, events } = await noest.track(parcel.trackingNumber);
} catch (err) {
  if (isShippingError(err)) console.error(err.code, err.message);
}

NoEST en PHP / Laravel

PHP
use DzDelivery\ClientFactory;
use DzDelivery\Errors\ShippingError;

$noest = ClientFactory::create('noest', [
    'apiToken' => getenv('NOEST_API_TOKEN'),
    'userGuid' => getenv('NOEST_USER_GUID'),
    'autoValidate' => true,
]);

$quote = $noest->getFees(['toWilayaId' => 16]);

try {
    $parcel = $noest->createParcel([
        'recipientName' => 'Mohamed Amine',
        'phone'         => '0550123456',
        'address'       => 'Cité 221 lots, n°98',
        'wilayaId'      => 16,
        'communeName'   => 'Bab Ezzouar',
        'productName'   => 'T-shirt',
        'price'         => 2500,
        'orderId'       => 'ORDER-1001',
    ]);

    $result = $noest->track($parcel->trackingNumber);
} catch (ShippingError $e) {
    echo "{$e->code}: {$e->getMessage()}";
}

Guide PHP complet (Laravel, erreurs, tests) : guide-php.md.

Méthodes supportées

MéthodeSupportNotes
createParcelouiReste pending jusqu’à validation (voir autoValidate).
trackouiStatut unifié + historique (event_key).
getFeesouiGrille du partenaire par wilaya (domicile, stop desk, retour).
getWilayas / getCommunesouiCommunes actives uniquement.
getStopDesksouiStations NOEST (id = code station, ex. 16B).
listParcelsNOT_SUPPORTEDL’API NOEST n’a pas de liste des commandes.
cancelParcelouiUniquement avant validation.
healthCheckouiVérifie le token (appel réel).

À savoir sur l’API NoEST

  • Validation : sans autoValidate: true, les commandes restent modifiables et supprimables, mais NOEST ne les ramasse pas.
  • Noms de communes : NOEST écrit par exemple « Bab Azzouar ». Le SDK accepte aussi « Bab Ezzouar » (correspondance tolérante, seulement quand une seule commune correspond).
  • orderId (référence NOEST) doit faire au moins 5 caractères : sinon VALIDATION_ERROR avant tout appel.
  • Compte suspendu ou userGuid inconnu → AUTH_FAILED ; doublon, commune inactive… → VALIDATION_ERROR avec details[].code.
  • Le baseUrl doit être en HTTPS.

Mapping natif détaillé (endpoints, champs, statuts) : PROVIDERS.md.

FAQ NoEST

Où trouver mon token et mon GUID NoEST ?

Dans le tableau de bord partenaire NOEST, rubrique API. Les deux sont nécessaires.

Pourquoi mes commandes NoEST ne sont pas ramassées ?

Elles ne sont pas validées. Activez autoValidate: true ou validez-les depuis le tableau de bord.

Puis-je lister mes colis NoEST ?

Non : l’API NOEST n’a pas d’endpoint de liste, listParcels renvoie NOT_SUPPORTED. Utilisez track par numéro.

Autres transporteurs

Même interface, mêmes statuts normalisés (pending, in_transit, delivered…).