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; }
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; }