Skip to content

Multi collo shipment

Sebastiaan Lokhorst edited this page Oct 11, 2017 · 6 revisions

To create a multi-collo shipment (a shipment composed of multiple parcels), create a Shipment for each parcel and connect them using a Group. Each Shipment must have its own unique barcode. The MainBarcode of the group must be the same for all shipments of the group.

Example

First create a API client, as usual:

use DivideBV\Postnl\Postnl;
use DivideBV\Postnl\ComplexTypes;

$client = new Postnl(...);
// Create addresses...
$receiverAddress = ComplexTypes\Address::create()
// fill in address
$senderAddress = ComplexTypes\Address::create();
// fill in address

$num_collo = 2;

// Parcel 1 of 2.
$barcode1 = $client->generateBarcodeByDestination($receiverAddress->getCountrycode());
$shipment1 = ComplexTypes\Shipment::create()
    ->setBarcode($barcode1)
    ->setAddresses(new ComplexTypes\ArrayOfAddress([
        $receiverAddress,
        $senderAddress,
    ]));
    // Set product code, dimension, etc...
$group1 = ComplexTypes\Group::create()
    ->setGroupSequence(1)
    ->setGroupCount($num_collo)
    ->setGroupType('03')
    ->setMainBarcode($barcode1);
$shipment1->setGroups(new ComplexTypes\ArrayOfGroup([$group1]));

// Parcel 2 of 2.
$barcode2 = $client->generateBarcodeByDestination($receiverAddress->getCountrycode());
$shipment2 = ComplexTypes\Shipment::create()
    ->setBarcode($barcode2)
    ->setAddresses(new ComplexTypes\ArrayOfAddress([
        clone $receiverAddress,
        clone $senderAddress,
    ]));
    // Set product code, address, dimension, etc...
$group2 = ComplexTypes\Group::create()
    ->setGroupSequence(2)
    ->setGroupCount($num_collo)
    ->setGroupType('03')
    ->setMainBarcode($barcode1);
$shipment2->setGroups(new ComplexTypes\ArrayOfGroup([$group2]));

$results = $client->generateLabels(new ComplexTypes\ArrayOfShipment([$shipment1,$shipment2]));

$i=0;
foreach($results->getResponseShipments() as $result) {
    foreach($result->getLabels() as $label) {
        $filename = "label_$i.pdf";
        $file = new \SplFileObject($filename, 'w');
        $file->fwrite($label->getContent());
        $i++;
    }
}

Note that you must clone the addresses in the second $shipment->setAddressess() call. If you don't, PHP will optimize them into a single object with two references pointing to it. The PostNL server doesn't understand this.

Clone this wiki locally