PHP code example of smart-dato / cbl-logistica-sdk
1. Go to this page and download the library: Download smart-dato/cbl-logistica-sdk library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
smart-dato / cbl-logistica-sdk example snippets
use SmartDato\CblLogistica\Data\Credentials;
use SmartDato\CblLogistica\Facades\CblLogistica;
$cbl = CblLogistica::withCredentials(new Credentials(
username: 'YourUser', // HTTP basic auth
password: 'YourPassword',
clientToken: 'a1b2c3…', // buys the daily token
clientCode: '000000311', // identifies the account in the request body
));
use SmartDato\CblLogistica\Data\Shipments\AddressData;
use SmartDato\CblLogistica\Data\Shipments\PackageData;
use SmartDato\CblLogistica\Data\Shipments\ShipmentData;
$result = $cbl->shipments()->create(new ShipmentData(
clientReference: 'ORDER-4242', // max 20 characters, see below
sender: new AddressData(
name: 'OMEST SRL',
street: 'Via L. Negrelli 15',
postalCode: '39100',
city: 'BOLZANO',
country: 'IT',
province: 'BZ',
),
receiver: new AddressData(
name: 'Josép Peñá',
street: 'Calle Mayor 1',
postalCode: '08029',
city: 'BARCELONA',
country: 'ES',
province: 'BARCELONA',
phone: '111222444',
nif: '123456789B',
email: '[email protected]',
),
numPackages: 2,
weight: 2.0,
volume: 0.02,
packages: [
new PackageData(packageNumber: 1, width: 0.2, height: 0.2, depth: 0.2, weight: 1.0),
new PackageData(packageNumber: 2, width: 0.2, height: 0.2, depth: 0.2, weight: 1.0),
],
observations1: 'Call before delivery',
carrier: 'SALVAT', //
$result->succeeded(); // the status field, OK vs ERROR
$result->carrierReference; // CBL's shipment number
$result->labels(); // [1 => '^XA…^XZ', 2 => '^XA…^XZ'] — raw ZPL per package
$result->ssccs(); // [1 => '00000000000000254823', …] — 20-digit SSCC per package
$result->errorMessages(); // ['Wrong Postal Code']
$result->warningMessages(); // ['Magnitude weight in field package 1 is too big']
$cbl->shipments()->create(new ShipmentData(
clientReference: 'ORDER-4242',
numPackages: 3, // the total, repeated on every call
packages: [new PackageData(packageNumber: 1, weight: 1.0)],
// … sender, receiver, weight
));
$cbl->shipments()->create(new ShipmentData(
clientReference: 'ORDER-4242', // same reference joins the same shipment
numPackages: 3,
packages: [
new PackageData(packageNumber: 2, weight: 1.0),
new PackageData(packageNumber: 3, weight: 1.0),
],
// …
));
$cbl->shipments()->create($data); // ValidationException when clientReference is longer
$pending = $cbl->shipments()->pending();
$pending->shipments(); // every pending entry
$pending->closed(); // those whose package count is complete
$pending->findByClientReference('ORDER-4242');
$confirmation = $cbl->shipments()->confirm(['ORDER-4242']);
$confirmation->generatedShipments; // 1
$cbl->shipments()->deletePending(['ORDER-4242'])->deletedShipments; // 1
$cbl->shipments()->deleteConfirmed(['ORDER-4242']); // marks only — call your CBL branch
$cbl->shipments()->deletePackages(['00000000000000254823'])->deletedPackages; // 1
$reprint = $cbl->shipments()->reprint('ORDER-4242', [1, 2]);
$reprint->labels(); // same envelope as create()
new ShipmentData(
// …
serviceType: 'YOUR-CBL-SERVICE-CODE',
pickupObservations1: 'Ring the bell at the loading bay',
pickupObservations2: 'Driver must ask for the warehouse desk',
);
$result = $cbl->status()->byReference('999935360776'); // client reference or carrier number
foreach ($result->events() as $event) {
$event->statusDate; // CarbonImmutable
$event->statusCode; // e.g. 'ALTA'
$event->statusDescription;
$event->carrierNumber;
$event->clientReference;
}
$result = $cbl->status()->byDateRange($from, $to); // clamped to 30 days
$result = $cbl->pod()->byReference('104932869');
$document = $result->first();
$document?->decoded(); // raw bytes, base64 already undone
$document?->fileExtension(); // 'pdf'
$document?->uploadDate; // CarbonImmutable
$result = $cbl->pod()->byDateRange($from, $to); // clamped to 7 days
$shipments = $cbl->shipments();
$shipments->create($data);
$shipments->lastRawRequest(); // the exact JSON sent
$shipments->lastRawResponse(); // the exact body received
use Saloon\Http\Faking\MockClient;
use Saloon\Http\Faking\MockResponse;
MockClient::global([
MockResponse::make(['dailyToken' => 'test-token']),
MockResponse::make(['carrierReference' => '12527', 'status' => 'OK', 'packagesTags' => []]),
]);
// exercise your code, then assert on the outgoing payload:
MockClient::getGlobal()->getLastPendingRequest()->body()->all();
MockClient::destroyGlobal();