/** * @param ShipmentTransmitSetType $ShipmentTransmitSet * @return ManifestsType */ public function transmitShipments(ShipmentTransmitSetType $ShipmentTransmitSet) { $XmlTransmitSet = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><transmit-set xmlns="http://www.canadapost.ca/ws/manifest-v' . self::API_VERSION . '"/>'); $XmlTransmitSetGroupIds = $XmlTransmitSet->addChild('group-ids'); if (null !== $ShipmentTransmitSet->getGroupIds()) { foreach ($ShipmentTransmitSet->getGroupIds() as $GroupId) { $XmlTransmitSetGroupIds->addChild('group-id', $GroupId->getGroupId()); } } if (true === $ShipmentTransmitSet->isCpcPickupIndicator()) { $XmlTransmitSet->addChild('cpc-pickup-indicator', ['false', 'true'][(int) $ShipmentTransmitSet->isCpcPickupIndicator()]); } $XmlTransmitSet->addChild('requested-shipping-point', $ShipmentTransmitSet->getRequestedShippingPoint()); if (null !== $ShipmentTransmitSet->getShippingPointId()) { $XmlTransmitSet->addChild('shipping-point-id', $ShipmentTransmitSet->getShippingPointId()); } $XmlTransmitSet->addChild('detailed-manifests', ['false', 'true'][(int) $ShipmentTransmitSet->isDetailedManifests()]); $XmlTransmitSet->addChild('method-of-payment', $ShipmentTransmitSet->getMethodOfPayment()); if (null !== $ShipmentTransmitSet->getManifestAddress()) { $XmlTransmitSetManifestAddress = $XmlTransmitSet->addChild('manifest-address'); $XmlTransmitSetManifestAddress->addChild('manifest-company', $ShipmentTransmitSet->getManifestAddress()->getManifestCompany()); if (null !== $ShipmentTransmitSet->getManifestAddress()->getManifestName()) { $XmlTransmitSetManifestAddress->addChild('manifest-name', $ShipmentTransmitSet->getManifestAddress()->getManifestName()); } $XmlTransmitSetManifestAddress->addChild('phone-number', $ShipmentTransmitSet->getManifestAddress()->getPhoneNumber()); if (null !== $ShipmentTransmitSet->getManifestAddress()->getAddressDetails()) { $XmlTransmitSetManifestAddressAddressDetails = $XmlTransmitSetManifestAddress->addChild('address-details'); $XmlTransmitSetManifestAddressAddressDetails->addChild('address-line-1', $ShipmentTransmitSet->getManifestAddress()->getAddressDetails()->getAddressLine1()); if (null !== $ShipmentTransmitSet->getManifestAddress()->getAddressDetails()->getAddressLine2()) { $XmlTransmitSetManifestAddressAddressDetails->addChild('address-line-2', $ShipmentTransmitSet->getManifestAddress()->getAddressDetails()->getAddressLine2()); } $XmlTransmitSetManifestAddressAddressDetails->addChild('city', $ShipmentTransmitSet->getManifestAddress()->getAddressDetails()->getCity()); $XmlTransmitSetManifestAddressAddressDetails->addChild('prov-state', $ShipmentTransmitSet->getManifestAddress()->getAddressDetails()->getProvState()); if (null !== $ShipmentTransmitSet->getManifestAddress()->getAddressDetails()->getCountryCode()) { $XmlTransmitSetManifestAddressAddressDetails->addChild('country-code', $ShipmentTransmitSet->getManifestAddress()->getAddressDetails()->getCountryCode()); } $XmlTransmitSetManifestAddressAddressDetails->addChild('postal-zip-code', $ShipmentTransmitSet->getManifestAddress()->getAddressDetails()->getPostalZipCode()); } } if (null !== $ShipmentTransmitSet->getCustomerReference()) { $XmlTransmitSet->addChild('customer-references', $ShipmentTransmitSet->getCustomerReference()); } if (null !== $ShipmentTransmitSet->getExcludedShipments()) { $XmlTransmitSetExcludedShipments = $XmlTransmitSet->addChild('excluded-shipments'); foreach ($ShipmentTransmitSet->getExcludedShipments() as $ExcludedShipment) { $XmlTransmitSetExcludedShipments->addChild('shipment-id', $ExcludedShipment->getShipmentId()); } } $request = $XmlTransmitSet->asXML(); $response = $this->processRequest(['request_url' => '/manifest', 'headers' => ['Content-Type: application/vnd.cpc.manifest-v' . self::API_VERSION . '+xml', 'Accept: application/vnd.cpc.manifest-v' . self::API_VERSION . '+xml'], 'request' => $request]); $responseXML = new SimpleXMLElement($response); switch ($responseXML->getName()) { case 'manifests': $ManifestsType = new ManifestsType(); if ($responseXML->link) { foreach ($responseXML->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']); } $ManifestsType->addLink($LinkType); } } return $ManifestsType; case 'messages': return WebService::getMessagesType($responseXML); break; default: return false; break; } }
use Distantia\CanadaPostWs\Shipping; use Distantia\CanadaPostWs\Type\Manifest\AddressDetailsType; use Distantia\CanadaPostWs\Type\Manifest\GroupIdListType; use Distantia\CanadaPostWs\Type\Manifest\ManifestAddressType; use Distantia\CanadaPostWs\Type\Manifest\ManifestsType; use Distantia\CanadaPostWs\Type\Manifest\ShipmentTransmitSetType; use Distantia\CanadaPostWs\Type\Messages\MessagesType; 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 $ShipmentTransmitSet = new ShipmentTransmitSetType(); $GroupIds = new GroupIdListType(); $GroupIds->setGroupId('4326432'); $ShipmentTransmitSet->addGroupId($GroupIds); $ShipmentTransmitSet->setRequestedShippingPoint('H2B1A0'); $ShipmentTransmitSet->setCpcPickupIndicator(true); $ShipmentTransmitSet->setDetailedManifests(true); $ShipmentTransmitSet->setMethodOfPayment('Account'); $ManifestAddress = new ManifestAddressType(); $ManifestAddress->setManifestCompany('MajorShop'); $ManifestAddress->setPhoneNumber('514 829 5879'); $AddressDetails = new AddressDetailsType(); $AddressDetails->setAddressLine1('1230 Tako RD.'); $AddressDetails->setCity('Ottawa'); $AddressDetails->setProvState('ON'); $AddressDetails->setCountryCode('CA');