Beispiel #1
0
 /**
  * Call Void Shipment request
  *
  * Reason to Call:
  * To delete a specific shipment prior to transmit. 
  *
  * More info at:
  * https://www.canadapost.ca/cpo/mc/business/productsservices/developers/services/shippingmanifest/voidshipment.jsf
  *
  * @param \XLite\Module\XC\CanadaPost\Model\Order\Parcel $parcel Canada Post parcel object
  *
  * @return \XLite\Core\CommonCell
  */
 public function callVoidShipmentRequest(\XLite\Module\XC\CanadaPost\Model\Order\Parcel $parcel)
 {
     $selfLink = $parcel->getShipment()->getLinkByRel(\XLite\Module\XC\CanadaPost\Model\Order\Parcel\Shipment\Link::REL_SELF);
     $apiHost = $selfLink->getHref();
     $result = new \XLite\Core\CommonCell();
     try {
         $request = new \XLite\Core\HTTP\Request($apiHost);
         $request->requestTimeout = $this->requestTimeout;
         $request->verb = 'DELETE';
         $request->setHeader('Authorization', 'Basic ' . base64_encode(static::getCanadaPostConfig()->user . ':' . static::getCanadaPostConfig()->password));
         $request->setHeader('Accept', $selfLink->getMediaType());
         $request->setHeader('Accept-language', static::ACCEPT_LANGUAGE_EN);
         if (static::isOnBehalfOfAMerchant()) {
             $request->setHeader('Platform-id', $this->getPlatformId());
         }
         $response = $request->sendRequest();
         if (isset($response)) {
             $errorCodes = array(0 => 'Unknown error', 404 => 'The resource was not found so the shipment id is incorrect or the shipment has already been voided.', 8064 => 'The shipment has been transmitted and cannot be voided.');
             if ($response->code == 204) {
                 // Valid response: do nothing
             } else {
                 $result->errors = array('VS_' . $response->code => isset($errorCodes[$response->code]) ? $errorCodes[$response->code] : $errorCodes[0]);
             }
         } else {
             $result->errors = array('INTERNAL' => sprintf('Error while connecting to the Canada Post host (%s) during Void Shipment request', $apiHost));
         }
     } catch (\Exception $e) {
         if (!isset($result->errors)) {
             $result->errors = array();
         }
         $result->errors += array($e->getCode(), $e->getMessage());
     }
     return $result;
 }
 /**
  * {@inheritDoc}
  */
 public function getShipment()
 {
     $this->__initializer__ && $this->__initializer__->__invoke($this, 'getShipment', array());
     return parent::getShipment();
 }