Get your api keys from Statusweb > Help > Statusweb API. On this page you can also get the Statusweb API documentation.
You can install this package via composer:
composer require jacobdekeizer/statusweb-client
This readme shows basic usage of this package, for all available options look at the class definitions and the api documentation.
Create the client
$client = (new \JacobDeKeizer\Statusweb\Client())
->setApiKey('api_key')
->setPassword('password');
$deliveryAddress = (new \JacobDeKeizer\Statusweb\Resources\Address())
->setStreet('Lange laan')
->setCity('Zevenaar')
->setHouseNumber('29A')
->setPostalCode('9281EM')
->setCountryCode(\JacobDeKeizer\Statusweb\Enums\CountryCode::NETHERLANDS)
->setEmail('noreply@example.com')
->setToTheAttentionOf('tav')
->setPhoneNumber('+31612345678')
->setName('Gijs Boersma');
$labelData = (new \JacobDeKeizer\Statusweb\Resources\LabelData())
->setLabelFormat(\JacobDeKeizer\Statusweb\Enums\LabelFormat::PDF)
->setReturnLabel(true); // return the pdf label in the response
$shipmentRow = (new \JacobDeKeizer\Statusweb\Resources\ShipmentRow())
->setAmount(1)
->setWeight(10)
->setUnit(\JacobDeKeizer\Statusweb\Enums\Unit::COLLI);
$shipment = (new \JacobDeKeizer\Statusweb\Resources\Shipment())
->setReference('My reference')
->setDeliveryAddress($deliveryAddress)
->setType(1) // Statusweb -> Tabellen -> Zendingsoorten
->setDirectSend(true) // when true the shipment is confirmed and can't be deleted
->setLabelData($labelData)
->addShipmentRow($shipmentRow); // ->setShipmentRows accepts an array of ShipmentRows
$shipmentResponse = $client->shipments()->create($shipment);
// Show label pdf
$data = base64_decode($shipmentResponse->getLabels());
header('Content-Type: application/pdf');
echo $data;
$deleteShipmentResponse = $client->shipments()->delete(12345678); // transportNumber
Sends all shipments where setDirectSend was false
$sendShipmentsResponse = $client->shipments()->send();
This endpoint does only work if the shipment is in transport or has arrived.
$statusResponse = $client->shipments()->getStatus(12345678); // transportNumber
$statusResponse->getStatuses();
This endpoint does only work if the are any shipments in transport or that have arrived.
$statusResponse = $client->shipments()->getAllStatuses();
$statusResponse->getStatuses();
Get the statusweb status url -> does only work when the shipment is in transport or has arrived
$statusLink = $client->shipments()->getStatusUrl(12345678); // transportNumber
This endpoint does only work if the shipment is in transport or has arrived.
$etaResponse = $client->shipments()->getEstimatedTimeOfArrival(12345678); // transportNumber
This endpoint does only work if the shipment isn't confirmed by the send endpoint and directSend for the shipment was false
$labelResponse = $client->labels()->get(9207289743, \JacobDeKeizer\Statusweb\Enums\LabelFormat::PDF);
Each endpoint can throw a StatuswebErrorResponse
or StatuswebException
.
The StatuswebErrorResponse
contains the error code and message from statusweb.
For example:
try {
$statusLink = $client->shipments()->getStatusUrl(12345678);
} catch (\JacobDeKeizer\Statusweb\Exceptions\StatuswebErrorResponse $statuswebErrorResponse) {
$hasLink = $statuswebErrorResponse->getCode() === \JacobDeKeizer\Statusweb\Enums\ResponseCode::NO_STATUS_URL_FOR_SHIPMENT;
} catch (\JacobDeKeizer\Statusweb\Exceptions\StatuswebException $statuswebException) {
$originalException = $statuswebException->getPrevious(); // do something
}
Statusweb session ids are valid for 2 hours.
To reduce the amount of sessionId requests you can create your own SessionStore.
By default the JacobDeKeizer\Statusweb\Stores\DefaultSessionStore
is used.
use JacobDeKeizer\Statusweb\Contracts\SessionStore;
use JacobDeKeizer\Statusweb\Dto\Session;
class DatabaseSessionStore implements SessionStore
{
public function put(string $apiKey, Session $session): void
{
// save in db
}
public function get(string $apiKey): ?Session
{
// retrieve from db
}
}
$client->setSessionStore(new DatabaseSessionStore());