-
Notifications
You must be signed in to change notification settings - Fork 40
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.
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.