use Distantia\CanadaPostWs\Type\Shipment\ParcelCharacteristicsType; use Distantia\CanadaPostWs\Type\Shipment\PreferencesType; use Distantia\CanadaPostWs\Type\Shipment\PrintPreferencesType; use Distantia\CanadaPostWs\Type\Shipment\ReferencesType; use Distantia\CanadaPostWs\Type\Shipment\SenderType; use Distantia\CanadaPostWs\Type\Shipment\SettlementInfoType; use Distantia\CanadaPostWs\Type\Shipment\ShipmentInfoType; use Distantia\CanadaPostWs\Type\Shipment\ShipmentType; use Distantia\CanadaPostWs\WebService; require_once __DIR__ . '/../../vendor/autoload.php'; // Config define('CANADA_POST_API_CUSTOMER_NUMBER', '2004381'); define('CANADA_POST_API_CONTRACT_ID', '42708517'); define('CANADA_POST_API_KEY', '6e93d53968881714:0bfa9fcb9853d1f51ee57a'); // Shipment object to create $Shipment = new ShipmentType(); $Shipment->setGroupId('4326432'); $Shipment->setRequestedShippingPoint('H2B1A0'); $Shipment->setCpcPickupIndicator(true); $Shipment->setExpectedMailingDate(new \DateTime('2016-10-24')); $DeliverySpec = new DeliverySpecType(); $DeliverySpec->setServiceCode(WebService::$serviceCodes[WebService::SHIPPING_CODE_DOMESTIC_EXPEDITED]); $Sender = new SenderType(); $Sender->setName('Bulma'); $Sender->setCompany('Capsule Corp.'); $Sender->setContactPhone('1 (514) 820 5879'); $AddressDetails = new AddressDetailsType(); $AddressDetails->setAddressLine1('502 MAIN ST N'); $AddressDetails->setCity('Montréal'); $AddressDetails->setProvState('QC'); $AddressDetails->setCountryCode('CA');
/** * @param ShipmentType $Shipment * @return bool|MessagesType|ShipmentInfoType */ public function createShipment(ShipmentType $Shipment) { $XmlShipment = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><shipment xmlns="http://www.canadapost.ca/ws/shipment-v' . self::API_VERSION . '"/>'); if (null !== $Shipment->getGroupId()) { $XmlShipment->addChild('group-id', $Shipment->getGroupId()); } else { $XmlShipment->addChild('transmit-shipment', ['false', 'true'][(int) $Shipment->isTransmitShipment()]); } if (null !== $Shipment->isQuickshipLabelRequested()) { $XmlShipment->addChild('quickship-label-requested', ['false', 'true'][(int) $Shipment->isQuickshipLabelRequested()]); } if (null !== $Shipment->getRequestedShippingPoint()) { $XmlShipment->addChild('requested-shipping-point', $Shipment->getRequestedShippingPoint()); } if (null !== $Shipment->isCpcPickupIndicator()) { $XmlShipment->addChild('cpc-pickup-indicator', ['false', 'true'][(int) $Shipment->isCpcPickupIndicator()]); } if (null !== $Shipment->getExpectedMailingDate()) { $XmlShipment->addChild('expected-mailing-date', $Shipment->getExpectedMailingDate()->format('Y-m-d')); } $XmlShipmentDeliverySpec = $XmlShipment->addChild('delivery-spec'); $XmlShipmentDeliverySpec->addChild('service-code', $Shipment->getDeliverySpec()->getServiceCode()); $XmlShipmentDeliverySpecSender = $XmlShipmentDeliverySpec->addChild('sender'); if (null !== $Shipment->getDeliverySpec()->getSender()->getName()) { $XmlShipmentDeliverySpecSender->addChild('name', $Shipment->getDeliverySpec()->getSender()->getName()); } $XmlShipmentDeliverySpecSender->addChild('company', $Shipment->getDeliverySpec()->getSender()->getCompany()); $XmlShipmentDeliverySpecSender->addChild('contact-phone', $Shipment->getDeliverySpec()->getSender()->getContactPhone()); $XmlShipmentDeliverySpecSenderAddressDetails = $XmlShipmentDeliverySpecSender->addChild('address-details'); $XmlShipmentDeliverySpecSenderAddressDetails->addChild('address-line-1', $Shipment->getDeliverySpec()->getSender()->getAddressDetails()->getAddressLine1()); if (null !== $Shipment->getDeliverySpec()->getSender()->getAddressDetails()->getAddressLine2()) { $XmlShipmentDeliverySpecSenderAddressDetails->addChild('address-line-2', $Shipment->getDeliverySpec()->getSender()->getAddressDetails()->getAddressLine2()); } $XmlShipmentDeliverySpecSenderAddressDetails->addChild('city', $Shipment->getDeliverySpec()->getSender()->getAddressDetails()->getCity()); $XmlShipmentDeliverySpecSenderAddressDetails->addChild('prov-state', $Shipment->getDeliverySpec()->getSender()->getAddressDetails()->getProvState()); $XmlShipmentDeliverySpecSenderAddressDetails->addChild('country-code', $Shipment->getDeliverySpec()->getSender()->getAddressDetails()->getCountryCode()); if (null !== $Shipment->getDeliverySpec()->getSender()->getAddressDetails()->getPostalZipCode()) { $XmlShipmentDeliverySpecSenderAddressDetails->addChild('postal-zip-code', $Shipment->getDeliverySpec()->getSender()->getAddressDetails()->getPostalZipCode()); } $XmlShipmentDeliverySpecDestination = $XmlShipmentDeliverySpec->addChild('destination'); if (null !== $Shipment->getDeliverySpec()->getDestination()->getName()) { $XmlShipmentDeliverySpecDestination->addChild('name', $Shipment->getDeliverySpec()->getDestination()->getName()); } if (null !== $Shipment->getDeliverySpec()->getDestination()->getCompany()) { $XmlShipmentDeliverySpecDestination->addChild('company', $Shipment->getDeliverySpec()->getDestination()->getCompany()); } if (null !== $Shipment->getDeliverySpec()->getDestination()->getAdditionalAddressInfo()) { $XmlShipmentDeliverySpecDestination->addChild('additional-address-info', $Shipment->getDeliverySpec()->getDestination()->getAdditionalAddressInfo()); } if (null !== $Shipment->getDeliverySpec()->getDestination()->getClientVoiceNumber()) { $XmlShipmentDeliverySpecDestination->addChild('client-voice-number', $Shipment->getDeliverySpec()->getDestination()->getClientVoiceNumber()); } $XmlShipmentDeliverySpecDestinationAddressDetails = $XmlShipmentDeliverySpecDestination->addChild('address-details'); if (null !== $Shipment->getDeliverySpec()->getDestination()->getAddressDetails()->getAddressLine1()) { $XmlShipmentDeliverySpecDestinationAddressDetails->addChild('address-line-1', $Shipment->getDeliverySpec()->getDestination()->getAddressDetails()->getAddressLine1()); } if (null !== $Shipment->getDeliverySpec()->getDestination()->getAddressDetails()->getAddressLine2()) { $XmlShipmentDeliverySpecDestinationAddressDetails->addChild('address-line-2', $Shipment->getDeliverySpec()->getDestination()->getAddressDetails()->getAddressLine2()); } if (null !== $Shipment->getDeliverySpec()->getDestination()->getAddressDetails()->getCity()) { $XmlShipmentDeliverySpecDestinationAddressDetails->addChild('city', $Shipment->getDeliverySpec()->getDestination()->getAddressDetails()->getCity()); } if (null !== $Shipment->getDeliverySpec()->getDestination()->getAddressDetails()->getProvState()) { $XmlShipmentDeliverySpecDestinationAddressDetails->addChild('prov-state', $Shipment->getDeliverySpec()->getDestination()->getAddressDetails()->getProvState()); } $XmlShipmentDeliverySpecDestinationAddressDetails->addChild('country-code', $Shipment->getDeliverySpec()->getDestination()->getAddressDetails()->getCountryCode()); if (null !== $Shipment->getDeliverySpec()->getDestination()->getAddressDetails()->getPostalZipCode()) { $XmlShipmentDeliverySpecDestinationAddressDetails->addChild('postal-zip-code', $Shipment->getDeliverySpec()->getDestination()->getAddressDetails()->getPostalZipCode()); } $OptionsList = $Shipment->getDeliverySpec()->getOptions(); if ($OptionsList) { $Options = $OptionsList->getOptions(); if ($Options) { $XmlShipmentDeliverySpecOptions = $XmlShipmentDeliverySpec->addChild('options'); foreach ($Options as $Option) { $XmlShipmentDeliverySpecOptionsOption = $XmlShipmentDeliverySpecOptions->addChild('option'); $XmlShipmentDeliverySpecOptionsOption->addChild('option-code', $Option->getOptionCode()); if (null !== $Option->getOptionAmount()) { $XmlShipmentDeliverySpecOptionsOption->addChild('option-amount', number_format($Option->getOptionAmount(), 2, '.', '')); } if (null !== $Option->isOptionQualifier1()) { $XmlShipmentDeliverySpecOptionsOption->addChild('option-qualifier-1', ['false', 'true'][(int) $Option->isOptionQualifier1()]); } if (null !== $Option->getOptionQualifier2()) { $XmlShipmentDeliverySpecOptionsOption->addChild('option-amount', $Option->getOptionQualifier2()); } } } } $XmlShipmentDeliverySpecParcelCharacteristics = $XmlShipmentDeliverySpec->addChild('parcel-characteristics'); $XmlShipmentDeliverySpecParcelCharacteristics->addChild('weight', $Shipment->getDeliverySpec()->getParcelCharacteristics()->getWeight()); if (null !== $Shipment->getDeliverySpec()->getParcelCharacteristics()->getDimensions()) { $XmlShipmentDeliverySpecParcelCharacteristicsDimensions = $XmlShipmentDeliverySpecParcelCharacteristics->addChild('dimensions'); $XmlShipmentDeliverySpecParcelCharacteristicsDimensions->addChild('length', $Shipment->getDeliverySpec()->getParcelCharacteristics()->getDimensions()->getLength()); $XmlShipmentDeliverySpecParcelCharacteristicsDimensions->addChild('width', $Shipment->getDeliverySpec()->getParcelCharacteristics()->getDimensions()->getWidth()); $XmlShipmentDeliverySpecParcelCharacteristicsDimensions->addChild('height', $Shipment->getDeliverySpec()->getParcelCharacteristics()->getDimensions()->getHeight()); } if (null !== $Shipment->getDeliverySpec()->getParcelCharacteristics()->isUnpackaged()) { $XmlShipmentDeliverySpecParcelCharacteristics->addChild('unpackaged', ['false', 'true'][(int) $Shipment->getDeliverySpec()->getParcelCharacteristics()->isUnpackaged()]); } if (null !== $Shipment->getDeliverySpec()->getParcelCharacteristics()->isMailingTube()) { $XmlShipmentDeliverySpecParcelCharacteristics->addChild('mailing-tube', ['false', 'true'][(int) $Shipment->getDeliverySpec()->getParcelCharacteristics()->isMailingTube()]); } if (null !== $Shipment->getDeliverySpec()->getParcelCharacteristics()->isOversized()) { $XmlShipmentDeliverySpecParcelCharacteristics->addChild('oversized', ['false', 'true'][(int) $Shipment->getDeliverySpec()->getParcelCharacteristics()->isOversized()]); } if (null !== $Shipment->getDeliverySpec()->getNotification()) { $XmlShipmentDeliverySpecNotification = $XmlShipmentDeliverySpec->addChild('notification'); $XmlShipmentDeliverySpecNotification->addChild('email', $Shipment->getDeliverySpec()->getNotification()->getEmail()); $XmlShipmentDeliverySpecNotification->addChild('on-shipment', ['false', 'true'][(int) $Shipment->getDeliverySpec()->getNotification()->isOnShipment()]); $XmlShipmentDeliverySpecNotification->addChild('on-exception', ['false', 'true'][(int) $Shipment->getDeliverySpec()->getNotification()->isOnException()]); $XmlShipmentDeliverySpecNotification->addChild('on-delivery', ['false', 'true'][(int) $Shipment->getDeliverySpec()->getNotification()->isOnDelivery()]); } if (null !== $Shipment->getDeliverySpec()->getPrintPreferences()) { $XmlShipmentDeliverySpecPrintPreferences = $XmlShipmentDeliverySpec->addChild('print-preferences'); if (null !== $Shipment->getDeliverySpec()->getPrintPreferences()->getOutputFormat()) { $XmlShipmentDeliverySpecPrintPreferences->addChild('output-format', $Shipment->getDeliverySpec()->getPrintPreferences()->getOutputFormat()); } if (null !== $Shipment->getDeliverySpec()->getPrintPreferences()->getEncoding()) { $XmlShipmentDeliverySpecPrintPreferences->addChild('encoding', $Shipment->getDeliverySpec()->getPrintPreferences()->getEncoding()); } } $XmlShipmentDeliverySpecPreferences = $XmlShipmentDeliverySpec->addChild('preferences'); $XmlShipmentDeliverySpecPreferences->addChild('show-packing-instructions', ['false', 'true'][(int) $Shipment->getDeliverySpec()->getPreferences()->isShowPackingInstructions()]); if (null !== $Shipment->getDeliverySpec()->getPreferences()->isShowPostageRate()) { $XmlShipmentDeliverySpecPreferences->addChild('show-postage-rate', ['false', 'true'][(int) $Shipment->getDeliverySpec()->getPreferences()->isShowPostageRate()]); } if (null !== $Shipment->getDeliverySpec()->getPreferences()->isShowInsuredValue()) { $XmlShipmentDeliverySpecPreferences->addChild('show-insured-value', ['false', 'true'][(int) $Shipment->getDeliverySpec()->getPreferences()->isShowInsuredValue()]); } if (null !== $Shipment->getDeliverySpec()->getReferences()) { $XmlShipmentDeliverySpecReferences = $XmlShipmentDeliverySpec->addChild('references'); if (null !== $Shipment->getDeliverySpec()->getReferences()->getCostCentre()) { $XmlShipmentDeliverySpecReferences->addChild('cost-centre', $Shipment->getDeliverySpec()->getReferences()->getCostCentre()); } if (null !== $Shipment->getDeliverySpec()->getReferences()->getCustomerRef1()) { $XmlShipmentDeliverySpecReferences->addChild('customer-ref-1', $Shipment->getDeliverySpec()->getReferences()->getCustomerRef1()); } if (null !== $Shipment->getDeliverySpec()->getReferences()->getCustomerRef2()) { $XmlShipmentDeliverySpecReferences->addChild('customer-ref-2', $Shipment->getDeliverySpec()->getReferences()->getCustomerRef2()); } } if (null !== $Shipment->getDeliverySpec()->getCustoms()) { $XmlShipmentDeliverySpecCustoms = $XmlShipmentDeliverySpec->addChild('customs'); $XmlShipmentDeliverySpecCustoms->addChild('currency', $Shipment->getDeliverySpec()->getCustoms()->getCurrency()); if (null !== $Shipment->getDeliverySpec()->getCustoms()->getConversionFromCad()) { $XmlShipmentDeliverySpecCustoms->addChild('conversion-from-cad', $Shipment->getDeliverySpec()->getCustoms()->getConversionFromCad()); } $XmlShipmentDeliverySpecCustoms->addChild('reason-for-export', $Shipment->getDeliverySpec()->getCustoms()->getReasonForExport()); if (null !== $Shipment->getDeliverySpec()->getCustoms()->getOtherReason()) { $XmlShipmentDeliverySpecCustoms->addChild('other-reason', $Shipment->getDeliverySpec()->getCustoms()->getOtherReason()); } $SkuList = $Shipment->getDeliverySpec()->getCustoms()->getSkuList(); if (null !== $SkuList) { $XmlShipmentDeliverySpecCustomsSkuList = $XmlShipmentDeliverySpecCustoms->addChild('sku-list'); if ($SkuList->getItems()) { foreach ($SkuList->getItems() as $Sku) { $XmlShipmentDeliverySpecCustomsSkuListItem = $XmlShipmentDeliverySpecCustomsSkuList->addChild('item'); $XmlShipmentDeliverySpecCustomsSkuListItem->addChild('customs-number-of-units', $Sku->getCustomsNumberOfUnits()); $XmlShipmentDeliverySpecCustomsSkuListItem->addChild('customs-description', $Sku->getCustomsDescription()); if (null != $Sku->getSku()) { $XmlShipmentDeliverySpecCustomsSkuListItem->addChild('sku', $Sku->getSku()); } if (null != $Sku->getHsTariffCode()) { $XmlShipmentDeliverySpecCustomsSkuListItem->addChild('hs-tariff-code', $Sku->getHsTariffCode()); } $XmlShipmentDeliverySpecCustomsSkuListItem->addChild('unit-weight', $Sku->getUnitWeight()); $XmlShipmentDeliverySpecCustomsSkuListItem->addChild('customs-value-per-unit', $Sku->getCustomsValuePerUnit()); if (null != $Sku->getCustomsUnitOfMeasure()) { $XmlShipmentDeliverySpecCustomsSkuListItem->addChild('customs-unit-of-measure', $Sku->getCustomsUnitOfMeasure()); } if (null != $Sku->getCountryOfOrigin()) { $XmlShipmentDeliverySpecCustomsSkuListItem->addChild('country-of-origin', $Sku->getCountryOfOrigin()); } if (null != $Sku->getProvinceOfOrigin()) { $XmlShipmentDeliverySpecCustomsSkuListItem->addChild('province-of-origin', $Sku->getProvinceOfOrigin()); } } } } if (null !== $Shipment->getDeliverySpec()->getCustoms()->getDutiesAndTaxesPrepaid()) { $XmlShipmentDeliverySpecCustoms->addChild('duties-and-taxes-prepaid', $Shipment->getDeliverySpec()->getCustoms()->getDutiesAndTaxesPrepaid()); } if (null !== $Shipment->getDeliverySpec()->getCustoms()->getCertificateNumber()) { $XmlShipmentDeliverySpecCustoms->addChild('certificate-number', $Shipment->getDeliverySpec()->getCustoms()->getCertificateNumber()); } if (null !== $Shipment->getDeliverySpec()->getCustoms()->getLicenceNumber()) { $XmlShipmentDeliverySpecCustoms->addChild('licence-number', $Shipment->getDeliverySpec()->getCustoms()->getLicenceNumber()); } if (null !== $Shipment->getDeliverySpec()->getCustoms()->getInvoiceNumber()) { $XmlShipmentDeliverySpecCustoms->addChild('invoice-number', $Shipment->getDeliverySpec()->getCustoms()->getInvoiceNumber()); } } $XmlShipmentDeliverySpecSettlementInfo = $XmlShipmentDeliverySpec->addChild('settlement-info'); if (null !== $Shipment->getDeliverySpec()->getSettlementInfo()->getPaidByCustomer()) { $XmlShipmentDeliverySpecSettlementInfo->addChild('paid-by-customer', $Shipment->getDeliverySpec()->getSettlementInfo()->getPaidByCustomer()); } if (null !== $Shipment->getDeliverySpec()->getSettlementInfo()->getContractId()) { $XmlShipmentDeliverySpecSettlementInfo->addChild('contract-id', $Shipment->getDeliverySpec()->getSettlementInfo()->getContractId()); } if (true === $Shipment->getDeliverySpec()->getSettlementInfo()->isCifShipment()) { $XmlShipmentDeliverySpecSettlementInfo->addChild('cif-shipment', ['false', 'true'][(int) $Shipment->getDeliverySpec()->getSettlementInfo()->isCifShipment()]); } $XmlShipmentDeliverySpecSettlementInfo->addChild('intended-method-of-payment', $Shipment->getDeliverySpec()->getSettlementInfo()->getIntendedMethodOfPayment()); if (null !== $Shipment->getReturnSpec()) { $XmlShipmentReturnSpec = $XmlShipment->addChild('return-spec'); $XmlShipmentReturnSpec->addChild('service-code', $Shipment->getReturnSpec()->getServiceCode()); $XmlShipmentReturnSpecReturnRecipient = $XmlShipmentReturnSpec->addChild('return-recipient'); if (null !== $Shipment->getReturnSpec()->getReturnRecipient()->getName()) { $XmlShipmentReturnSpecReturnRecipient->addChild('name', $Shipment->getReturnSpec()->getReturnRecipient()->getName()); } if (null !== $Shipment->getReturnSpec()->getReturnRecipient()->getCompany()) { $XmlShipmentReturnSpecReturnRecipient->addChild('company', $Shipment->getReturnSpec()->getReturnRecipient()->getCompany()); } $XmlShipmentReturnSpecReturnRecipientAddressDetails = $XmlShipmentReturnSpecReturnRecipient->addChild('address-details'); $XmlShipmentReturnSpecReturnRecipientAddressDetails->addChild('address-line-1', $Shipment->getReturnSpec()->getReturnRecipient()->getAddressDetails()->getAddressLine1()); if (null !== $Shipment->getReturnSpec()->getReturnRecipient()->getAddressDetails()->getAddressLine2()) { $XmlShipmentReturnSpecReturnRecipientAddressDetails->addChild('address-line-2', $Shipment->getReturnSpec()->getReturnRecipient()->getAddressDetails()->getAddressLine2()); } $XmlShipmentReturnSpecReturnRecipientAddressDetails->addChild('city', $Shipment->getReturnSpec()->getReturnRecipient()->getAddressDetails()->getCity()); $XmlShipmentReturnSpecReturnRecipientAddressDetails->addChild('prov-state', $Shipment->getReturnSpec()->getReturnRecipient()->getAddressDetails()->getProvState()); $XmlShipmentReturnSpecReturnRecipientAddressDetails->addChild('postal-zip-code', $Shipment->getReturnSpec()->getReturnRecipient()->getAddressDetails()->getPostalZipCode()); if (null !== $Shipment->getReturnSpec()->getReturnNotification()) { $XmlShipmentReturnSpec->addChild('return-notification', $Shipment->getReturnSpec()->getReturnNotification()); } } $request = $XmlShipment->asXML(); $response = $this->processRequest(['request_url' => '/shipment', 'headers' => ['Content-Type: application/vnd.cpc.shipment-v' . self::API_VERSION . '+xml', 'Accept: application/vnd.cpc.shipment-v' . self::API_VERSION . '+xml'], 'request' => $request]); $responseXML = new SimpleXMLElement($response); switch ($responseXML->getName()) { case 'shipment-info': $ShipmentInfoType = new ShipmentInfoType(); $ShipmentInfoType->setShipmentId((string) $responseXML->{'shipment-id'}); $ShipmentInfoType->setShipmentStatus((string) $responseXML->{'shipment-status'}); $ShipmentInfoType->setTrackingPin((string) $responseXML->{'tracking-pin'}); if ($responseXML->{'links'}->link) { foreach ($responseXML->{'links'}->link as $link) { $LinkType = new LinkType(); $LinkType->setHref((string) $link['href']); $LinkType->setRel((string) $link['rel']); $LinkType->setMediaType((string) $link['media-type']); if (isset($link['index'])) { $LinkType->setIndex((string) $link['index']); } $ShipmentInfoType->addLink($LinkType); } } return $ShipmentInfoType; break; case 'messages': return WebService::getMessagesType($responseXML); break; default: return false; break; } }