dividebv / postnl
Library to connect to PostNL's SOAP service called CIF
Installs: 333 493
Dependents: 1
Suggesters: 0
Security: 0
Stars: 31
Watchers: 10
Forks: 39
Open Issues: 5
Requires
- php: >=7.0
- ext-dom: *
- ext-soap: *
Requires (Dev)
- apigen/apigen: ^4.1
- squizlabs/php_codesniffer: 2.*
This package is auto-updated.
Last update: 2025-03-17 16:51:29 UTC
README
This is a library to interface with the SOAP services offered by PostNL, called CIF.
New authorization
Since version 2.0 of this library, the new authorization method (using tokens instead of username/password) is used.
Installation
Install the latest version with
composer require dividebv/postnl
Implementation Status
This library is not complete. This table lists which services are implemented and which aren't. The list of existing services is taken from PostNL's developer center.
Service | Implemented | Version |
---|---|---|
Addresses € | ||
Adrescheck Nationaal | ✗ | N/A |
Adrescheck Basis Nationaal | ✗ | N/A |
Adrescheck Internationaal | ✗ | N/A |
Persoon op Adrescheck Basis | ✗ | N/A |
Geo Adrescheck Nationaal | ✗ | N/A |
Creditworthiness & Business information € | ||
Bedrijfscheck Nationaal | ✗ | N/A |
Fraudepreventie Check Basis | ✗ | N/A |
IBANcheck Nationaal | ✗ | N/A |
Kredietcheck Consument Basis | ✗ | N/A |
Kredietcheck Consument Premium | ✗ | N/A |
Kredietcheck Zakelijk | ✗ | N/A |
Send & Track | ||
Barcode webservice | ✓ | 1_1 |
Confirming webservice | ✓ | 1_9 |
Labelling webservice | ✓ | 2_0 |
Shippingstatus webservice | ✓ | 1_6 |
Delivery options | ||
Deliverydate webservice | ✓ | 2_1 |
Location webservice | ✓ | 2_1 |
Timeframe webservice | ✓ | 2_0 |
Bulkmail webservice | ✗ | N/A |
Example
use DivideBV\Postnl\Postnl; use DivideBV\Postnl\ComplexTypes; // Create client class using credentials received from PostNL. $client = new Postnl( 12345678, // Customer number 'ABCD', // Customer code 'Acme BV', // Customer name 'xxxxxxxx', // API key 123456, // Collection location 'CD1234', // Globalpack true // Whether to use PostNL's sandbox environment. ); /** * Jan Smit * Smit & Zonen * Hoofdstraat 1A * 1234 AB Heikant * The Netherlands */ $receiverAddress = ComplexTypes\Address::create() ->setAddressType('01') ->setFirstName('Jan') ->setName('Smit') ->setCompanyName('Smit & Zonen') ->setStreet('Hoofdstraat') ->setHouseNr('1') ->setHouseNrExt('A') ->setZipcode('1234AB') ->setCity('Heikant') ->setCountrycode('NL'); $senderAddress = ComplexTypes\Address::create() ->setAddressType('02') ->setFirstName('Robert') ->setName('Jansen') ->setCompanyName('Jansen & Janssen') ->setStreet('Hoofdstraat') ->setHouseNr('999') ->setHouseNrExt('B') ->setZipcode('1234AB') ->setCity('Heikant') ->setCountrycode('NL'); // Request a barcode from PostNL. $barcode = $client->generateBarcodeByDestination($receiverAddress->getCountryCode()); // Create a shipment. $shipment = ComplexTypes\Shipment::create() ->setAddresses(new ComplexTypes\ArrayOfAddress([ $receiverAddress, $senderAddress, ])) ->setBarcode($barcode) ->setDimension(ComplexTypes\Dimension::create() ->setWeight(5000) // Weight in g ->setWidth(215) // Width in mm ->setLength(305) // Length in mm ->setHeight(280) // Height in mm ) ->setProductCodeDelivery('3085'); // Generate label and confirm shipment. $result = $client->generateLabel($shipment); // Save the label PDF locally. $label = $result->getLabels()[0]; $file = new \SplFileObject("label.pdf", 'w'); $file->fwrite($label->getContent());