Example #1
0
 public function requestLabel($track)
 {
     $hlp = Mage::helper('udropship');
     $v = $this->getVendor();
     $shipment = $track->getShipment();
     $order = $shipment->getOrder();
     if (!$order->getShippingMethod()) {
         return $this;
     }
     $this->setStore($order->getStore());
     $address = $order->getShippingAddress();
     $customer = $hlp->getOrderCustomer($order);
     $reference = $track->getReference() ? $track->getReference() : $order->getIncrementId();
     if ($shippingMethod = $shipment->getUdropshipMethod()) {
         $arr = explode('_', $shippingMethod);
         $methodCode = $arr[1];
     } else {
         $ship = explode('_', $order->getShippingMethod(), 2);
         $methodCode = $v->getShippingMethodCode($ship[1]);
     }
     //$usps = Mage::getSingleton('shipping/config')->getCarrierInstance('usps');
     $mailClass = !empty($this->_mailClass[$methodCode]) ? $this->_mailClass[$methodCode] : $v->getEndiciaMailClass();
     $skus = array();
     foreach ($shipment->getAllItems() as $item) {
         $skus[] = $item->getSku();
     }
     $weight = $track->getWeight();
     if (!$weight) {
         $weight = 0;
         foreach ($shipment->getAllItems() as $item) {
             $weight += $item->getWeight() * $item->getQty();
         }
     }
     $weight = max($weight, 1);
     $value = $track->getValue();
     if (!$value) {
         $value = 0;
         foreach ($shipment->getAllItems() as $item) {
             $value += ($item->getBasePrice() ? $item->getBasePrice() : $item->getPrice()) * $item->getQty();
         }
     }
     $length = $track->getLength() ? $track->getLength() : $v->getDefaultPkgLength();
     $width = $track->getWidth() ? $track->getWidth() : $v->getDefaultPkgWidth();
     $height = $track->getHeight() ? $track->getHeight() : $v->getDefaultPkgHeight();
     $labelRotate = $v->getPdfLabelRotate() ? 'Rotate' . $v->getPdfLabelRotate() : 'None';
     $labelType = $v->getEndiciaLabelType();
     if ($v->getCountryId() != $address->getCountryId()) {
         $labelType = 'International';
         $labelRotate = 'Rotate270';
     }
     $data = array('RequesterID' => $v->getEndiciaRequesterId(), 'AccountID' => $v->getEndiciaAccountId(), 'PassPhrase' => $v->getEndiciaPassPhrase(), 'MailClass' => $mailClass, 'DateAdvance' => 0, 'WeightOz' => $weight * 16, 'CostCenter' => 0, 'Value' => $value, 'InsuredValue' => $value, 'MailpieceShape' => $v->getEndiciaMailpieceShape(), 'MailpieceDimensions' => array('Length' => $length, 'Width' => $width, 'Height' => $height), 'Services' => array('DeliveryConfirmation' => $v->getEndiciaDeliveryConfirmation() ? 'ON' : 'OFF', 'SignatureConfirmation' => $v->getSignatureConfirmation() ? 'ON' : 'OFF', 'ReturnReceipt' => $v->getEndiciaReturnReceipt() ? 'ON' : 'OFF', 'ElectronicReturnReceipt' => $v->getEndiciaElectronicReturnReceipt() ? 'ON' : 'OFF', 'COD' => $v->getEndiciaCod() ? 'ON' : 'OFF', 'RestrictedDelivery' => $v->getEndiciaRestrictedDelivery(), 'InsuredMail' => $v->getEndiciaInsuredMail()), 'Description' => $reference, 'PartnerCustomerID' => $customer->getIncrementId() ? $customer->getIncrementId() : 'Guest', 'PartnerTransactionID' => $order->getIncrementId(), 'ToName' => $address->getName(), 'ToCompany' => $address->getCompany(), 'ToAddress1' => $address->getStreet(1), 'ToAddress2' => $address->getStreet(2), 'ToAddress3' => $address->getStreet(3), 'ToAddress4' => $address->getStreet(4), 'ToCity' => $address->getCity(), 'ToState' => $address->getRegionCode(), 'ToPostalCode' => $address->getPostcode(), 'ToZIP4' => '', 'ToCountry' => $hlp->getCountryName($address->getCountryId()), 'ToPhone' => $address->getTelephone() ? preg_replace('#[^0-9]#', '', $address->getTelephone()) : '8005551212', 'FromName' => $v->getVendorName(), 'ReturnAddress1' => $v->getStreet(1), 'ReturnAddress2' => $v->getStreet(2), 'ReturnAddress3' => $v->getStreet(3), 'ReturnAddress4' => $v->getStreet(4), 'FromCity' => $v->getCity(), 'FromState' => $v->getRegionCode(), 'FromPostalCode' => $v->getZip(), 'FromZIP4' => '', 'OriginCountry' => $hlp->getCountryName($v->getCountryId()), 'FromPhone' => preg_replace('#[^0-9]#', '', $v->getTelephone()), 'Test' => $v->getEndiciaTestMode() ? 'YES' : 'NO', 'LabelType' => $labelType, 'ImageRotation' => $labelRotate, 'ResponseOptions' => array('PostagePrice' => 'TRUE'), 'RubberStamp1' => 'Order # ' . $order->getIncrementId(), 'RubberStamp2' => $order->getIncrementId() != $reference ? 'Ref. ' . $reference : '', 'CustomsFormType' => $v->getEndiciaCustomsFormType(), 'CustomsQuantity1' => 0, 'CustomsValue1' => 0, 'CustomsWeight1' => 0, 'CustomsQuantity2' => 0, 'CustomsValue2' => 0, 'CustomsWeight2' => 0, 'CustomsQuantity3' => 0, 'CustomsValue3' => 0, 'CustomsWeight3' => 0, 'CustomsQuantity4' => 0, 'CustomsValue4' => 0, 'CustomsWeight4' => 0, 'CustomsQuantity5' => 0, 'CustomsValue5' => 0, 'CustomsWeight5' => 0);
     switch ($v->getLabelType()) {
         case 'PDF':
             $data['ImageFormat'] = 'PNG';
             $data['LabelSize'] = '4x6';
             break;
         case 'EPL':
             $data['ImageFormat'] = 'EPL2';
             $data['LabelSize'] = '4x6';
             $data['LabelRotate'] = 'Rotate180';
             /*
             EPL2 and ZPLII are supported for:
             - Default label type for domestic mail classes.
             - International label type when used with
                 - Priority Mail International Flat Rate Envelope
                 - Small Flat Rate Box
                 - First Class Mail International
             */
             break;
         default:
             Mage::throwException('Invalid vendor label type');
     }
     $client = new SoapClient($v->getEndiciaApiUrl() . '?wsdl');
     $result = $client->GetPostageLabel(array('LabelRequest' => $data));
     if (!$result || empty($result->LabelRequestResponse)) {
         Mage::throwException('Invalid API response');
     }
     $xml = $result->LabelRequestResponse;
     if ((int) $xml->Status != 0) {
         Mage::throwException($xml->ErrorMessage);
     }
     if (empty($xml->Base64LabelImage) && empty($xml->Label->Image)) {
         Mage::throwException('Unable to retrieve the label.');
     }
     $track->setCarrierCode('usps');
     $track->setTitle('USPS');
     $track->setNumber($xml->TrackingNumber);
     $track->setFinalPrice($xml->FinalPostage);
     $labelImages = array();
     $fees = $xml->PostagePrice->Fees;
     $extra = array('batch' => $this->getBatch()->getId(), 'ref' => $reference, 'date' => strtoupper(date('M d Y')), 'actwt' => $weight, 'trkid' => $xml->TrackingNumber, 'cur' => 'USD', 'wunit' => 'LBS', 'pkg' => 1, 'method' => $xml->PostagePrice->Postage->MailService, 'orderid' => $order->getIncrementId(), 'value' => $value, 'hndlfee' => $v->getHandlingFee(), 'items' => join("\n", array_slice(explode("\n", wordwrap(join(', ', $skus), 48, "\n", true)), 0, 6)), 'svc' => $xml->PostagePrice->Postage->TotalAmount, 'svcpub' => $xml->FinalPostage, 'svcopt' => $fees->TotalAmount, 'svccom' => $fees->CertificateOfMailing, 'svccm' => $fees->CertifiedMail, 'svccod' => $fees->CollectOnDelivery, 'svcdc' => $fees->DeliveryConfirmation, 'svcerr' => $fees->ElectronicReturnReceipt, 'svcim' => $fees->InsuredMail, 'svcrm' => $fees->RegisteredMail, 'svcrd' => $fees->RestrictedDelivery, 'svcrr' => $fees->ReturnReceipt, 'svcrrm' => $fees->ReturnReceiptForMerchandise, 'svcsc' => $fees->SignatureConfirmation, 'svcsh' => $fees->SpecialHandling);
     $extra['svctot'] = $extra['svcpub'] + $extra['hndlfee'];
     if (!empty($xml->Base64LabelImage)) {
         $labelImages[] = $this->processImage($v->getLabelType(), $xml->Base64LabelImage, $extra);
     } else {
         foreach ($xml->Label->Image as $image) {
             $labelImages[] = $this->processImage($v->getLabelType(), $image->_, $extra);
         }
     }
     $labelModel = Mage::helper('udropship')->getLabelTypeInstance($v->getLabelType());
     $labelModel->setVendor($v)->updateTrack($track, $labelImages);
     if ($v->getLabelType() == 'PDF' && $labelType == 'International') {
         // for customs forms - renders on the whole page
         $track->setLabelRenderOptions(serialize(array('r' => 90, 'l' => 0.5, 't' => 0.5, 'w' => 10, 'h' => 6.875)));
     }
     return $this;
 }
Example #2
0
 function retrieveLabel($sInfo)
 {
     global $messageStack;
     $endicia_results = array();
     if (in_array($sInfo->ship_method, array('I2DEam', 'I2Dam', 'I3D'))) {
         // unsupported ship methods
         $messageStack->add('The ship method requested is not supported by this tool presently. Please ship the package via a different tool.', 'error');
         return false;
     }
     $labels = array();
     $xml = $this->FormatEndiciaShipRequest($sInfo);
     //echo 'Endicia XML Label Submit String:'; print_r($xml); echo '<br />'; //return false;
     //	$client = new SoapClient((MODULE_SHIPPING_ENDICIA_TEST_MODE=='Test')?PATH_TO_TEST_RATE_WSDL:PATH_TO_RATE_WSDL, array('trace'=>1));
     $url = MODULE_SHIPPING_ENDICIA_TEST_MODE == 'Prod' ? MODULE_SHIPPING_ENDICIA_WSDL_URL : MODULE_SHIPPING_ENDICIA_TEST_WSDL_URL;
     $client = new SoapClient($url, array('trace' => 1));
     try {
         $response = $client->GetPostageLabel($xml);
         //echo 'Request <pre>' . htmlspecialchars($client->__getLastRequest()) . '</pre>';
         //echo 'Response <pre>' . htmlspecialchars($client->__getLastResponse()) . '</pre>';
         //echo 'label response array = '; print_r($response); echo '<br />';
         if ($response->LabelRequestResponse->Status == 0) {
             $net_cost = $response->LabelRequestResponse->FinalPostage;
             $book_cost = $response->LabelRequestResponse->FinalPostage;
             $del_date = '';
             $tracking = $response->LabelRequestResponse->TrackingNumber;
             $zone = '';
             $label = $response->LabelRequestResponse->Base64LabelImage;
             $endicia_results[] = array('ref_id' => $sInfo->purchase_invoice_id, 'tracking' => $tracking, 'book_cost' => $book_cost, 'net_cost' => $net_cost);
             if ($label) {
                 $date = explode('-', $sInfo->ship_date);
                 $file_path = SHIPPING_DEFAULT_LABEL_DIR . $this->code . '/' . $date[0] . '/' . $date[1] . '/' . $date[2] . '/';
                 validate_path($file_path);
                 $this->returned_label = $label;
                 $file_name = $tracking . '.lpt';
                 // assume thermal printer
                 // decode label if necessary
                 //echo 'label raw = '.$label.'<br>';
                 //echo 'label decoded = '.base64_decode($label).'<br>';
                 //		  if (!in_array(MODULE_SHIPPING_ENDICIA_PRINTER_TYPE, array('EPL2','ZPLII'))) $label = base64_decode($label);
                 $label = base64_decode($label);
                 if (!($handle = fopen($file_path . $file_name, 'w'))) {
                     $messageStack->add('Cannot open file (' . $file_path . $file_name . ')', 'error');
                     return false;
                 }
                 if (fwrite($handle, $label) === false) {
                     $messageStack->add('Cannot write to file (' . $file_path . $file_name . ')', 'error');
                     return false;
                 }
                 fclose($handle);
                 $messageStack->add(sprintf(SHIPPING_ENDICIA_LABEL_STATUS, $tracking, $response->LabelRequestResponse->PostageBalance), 'success');
             } else {
                 $messageStack->add('Error - No label found in return string.', 'error');
                 return false;
             }
         } else {
             $messageStack->add(TEXT_ERROR . ' (' . $response->LabelRequestResponse->Status . ') ' . $response->LabelRequestResponse->ErrorMessage, 'error');
             return false;
         }
     } catch (SoapFault $exception) {
         //echo 'Fault Request <pre>'  . htmlspecialchars($client->__getLastRequest()) . '</pre>';
         //echo 'Fault Response <pre>' . htmlspecialchars($client->__getLastResponse()) . '</pre>';
         $messageStack->add("Soap Error ({$exception->faultcode}) {$exception->faultstring}", 'error');
         return false;
     }
     return $endicia_results;
 }