Advertisement
Guest User

Usps.php with xml mods

a guest
Aug 5th, 2015
735
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 19.03 KB | None | 0 0
  1. <?php
  2.  
  3. class Yourcompany_UspsLabel_Model_Usa_Shipping_Carrier_Usps extends Mage_Usa_Model_Shipping_Carrier_Usps {
  4.  
  5.     protected function _formUsExpressShipmentRequest(Varien_Object $request)
  6.     {
  7.         $packageParams = $request->getPackageParams();
  8.  
  9.         $packageWeight = $request->getPackageWeight();
  10.         if ($packageParams->getWeightUnits() != Zend_Measure_Weight::OUNCE) {
  11.             $packageWeight = round(Mage::helper('usa')->convertMeasureWeight(
  12.                 $request->getPackageWeight(),
  13.                 $packageParams->getWeightUnits(),
  14.                 Zend_Measure_Weight::OUNCE
  15.             ));
  16.         }
  17.  
  18.         list($fromZip5, $fromZip4) = $this->_parseZip($request->getShipperAddressPostalCode());
  19.         list($toZip5, $toZip4) = $this->_parseZip($request->getRecipientAddressPostalCode(), true);
  20.  
  21.         $rootNode = 'ExpressMailLabelRequest';
  22.         // the wrap node needs for remove xml declaration above
  23.         $xmlWrap = new SimpleXMLElement('<?xml version = "1.0" encoding = "UTF-8"?><wrap/>');
  24.         $xml = $xmlWrap->addChild($rootNode);
  25.         $xml->addAttribute('USERID', $this->getConfigData('userid'));
  26.         $xml->addAttribute('PASSWORD', $this->getConfigData('password'));
  27.         $xml->addChild('Option');
  28.         $xml->addChild('Revision');
  29.         $xml->addChild('EMCAAccount');
  30.         $xml->addChild('EMCAPassword');
  31.         $xml->addChild('ImageParameters');
  32.         $xml->addChild('FromFirstName', $request->getShipperContactPersonFirstName());
  33.         $xml->addChild('FromLastName', $request->getShipperContactPersonLastName());
  34.         $xml->addChild('FromFirm', $request->getShipperContactCompanyName());
  35.         $xml->addChild('FromAddress1', $request->getShipperAddressStreet2());
  36.         $xml->addChild('FromAddress2', $request->getShipperAddressStreet1());
  37.         $xml->addChild('FromCity', $request->getShipperAddressCity());
  38.         $xml->addChild('FromState', $request->getShipperAddressStateOrProvinceCode());
  39.         $xml->addChild('FromZip5', $fromZip5);
  40.         $xml->addChild('FromZip4', $fromZip4);
  41.         $xml->addChild('FromPhone', $request->getShipperContactPhoneNumber());
  42.         $xml->addChild('ToFirstName', $request->getRecipientContactPersonFirstName());
  43.         $xml->addChild('ToLastName', $request->getRecipientContactPersonLastName());
  44.         $xml->addChild('ToFirm', $request->getRecipientContactCompanyName());
  45.         $xml->addChild('ToAddress1', $request->getRecipientAddressStreet2());
  46.         $xml->addChild('ToAddress2', $request->getRecipientAddressStreet1());
  47.         $xml->addChild('ToCity', $request->getRecipientAddressCity());
  48.         $xml->addChild('ToState', $request->getRecipientAddressStateOrProvinceCode());
  49.         $xml->addChild('ToZip5', $toZip5);
  50.         $xml->addChild('ToZip4', $toZip4);
  51.         $xml->addChild('ToPhone', $request->getRecipientContactPhoneNumber());
  52.         $xml->addChild('WeightInOunces', $packageWeight);
  53.         $xml->addChild('WaiverOfSignature', $packageParams->getDeliveryConfirmation());
  54.         $xml->addChild('POZipCode');
  55.         $xml->addChild('ImageType', 'PDF');
  56.         $xml->addChild('CustomerRefNo', $request->getOrderId());
  57.         //Mage::log("No :".$request->getOrderId(),null,'usps.log');
  58.         $xml = $xmlWrap->{$rootNode}->asXML();
  59.         return $xml;
  60.     }
  61.  
  62.     /**
  63.      * Form XML for US Signature Confirmation request
  64.      * As integration guide it is important to follow appropriate sequence for tags e.g.: <FromLastName /> must be
  65.      * after <FromFirstName />
  66.      *
  67.      * @param Varien_Object $request
  68.      * @param string $serviceType
  69.      *
  70.      * @throws Exception
  71.      *
  72.      * @return string
  73.      */
  74.     protected function _formUsSignatureConfirmationShipmentRequest(Varien_Object $request, $serviceType)
  75.     {
  76.         switch ($serviceType) {
  77.             case 'PRIORITY':
  78.             case 'Priority':
  79.                 $serviceType = 'Priority';
  80.                 break;
  81.             case 'FIRST CLASS':
  82.             case 'First Class':
  83.                 $serviceType = 'First Class';
  84.                 break;
  85.             case 'STANDARD':
  86.             case 'Standard Post':
  87.                 $serviceType = 'Standard Post';
  88.                 break;
  89.             case 'MEDIA':
  90.             case 'Media':
  91.                 $serviceType = 'Media Mail';
  92.                 break;
  93.             case 'LIBRARY':
  94.             case 'Library':
  95.                 $serviceType = 'Library Mail';
  96.                 break;
  97.             default:
  98.                 throw new Exception(Mage::helper('usa')->__('Service type does not match'));
  99.         }
  100.         $packageParams = $request->getPackageParams();
  101.         $packageWeight = $request->getPackageWeight();
  102.         if ($packageParams->getWeightUnits() != Zend_Measure_Weight::OUNCE) {
  103.             $packageWeight = round(Mage::helper('usa')->convertMeasureWeight(
  104.                 $request->getPackageWeight(),
  105.                 $packageParams->getWeightUnits(),
  106.                 Zend_Measure_Weight::OUNCE
  107.             ));
  108.         }
  109.  
  110.         list($fromZip5, $fromZip4) = $this->_parseZip($request->getShipperAddressPostalCode());
  111.         list($toZip5, $toZip4) = $this->_parseZip($request->getRecipientAddressPostalCode(), true);
  112.  
  113.         if ($this->getConfigData('mode')) {
  114.             $rootNode = 'SignatureConfirmationV3.0Request';
  115.         } else {
  116.             $rootNode = 'SigConfirmCertifyV3.0Request';
  117.         }
  118.         // the wrap node needs for remove xml declaration above
  119.         $xmlWrap = new SimpleXMLElement('<?xml version = "1.0" encoding = "UTF-8"?><wrap/>');
  120.         $xml = $xmlWrap->addChild($rootNode);
  121.         $xml->addAttribute('USERID', $this->getConfigData('userid'));
  122.         $xml->addChild('Option', 1);
  123.         $xml->addChild('ImageParameters');
  124.         $xml->addChild('FromName', $request->getShipperContactPersonName());
  125.         $xml->addChild('FromFirm', $request->getShipperContactCompanyName());
  126.         $xml->addChild('FromAddress1', $request->getShipperAddressStreet2());
  127.         $xml->addChild('FromAddress2', $request->getShipperAddressStreet1());
  128.         $xml->addChild('FromCity', $request->getShipperAddressCity());
  129.         $xml->addChild('FromState', $request->getShipperAddressStateOrProvinceCode());
  130.         $xml->addChild('FromZip5', $fromZip5);
  131.         $xml->addChild('FromZip4', $fromZip4);
  132.         $xml->addChild('ToName', $request->getRecipientContactPersonName());
  133.         $xml->addChild('ToFirm', $request->getRecipientContactCompanyName());
  134.         $xml->addChild('ToAddress1', $request->getRecipientAddressStreet2());
  135.         $xml->addChild('ToAddress2', $request->getRecipientAddressStreet1());
  136.         $xml->addChild('ToCity', $request->getRecipientAddressCity());
  137.         $xml->addChild('ToState', $request->getRecipientAddressStateOrProvinceCode());
  138.         $xml->addChild('ToZip5', $toZip5);
  139.         $xml->addChild('ToZip4', $toZip4);
  140.         $xml->addChild('WeightInOunces', $packageWeight);
  141.         $xml->addChild('ServiceType', $serviceType);
  142.         $xml->addChild('WaiverOfSignature', $packageParams->getDeliveryConfirmation());
  143.         $xml->addChild('ImageType', 'PDF');
  144.         $xml->addChild('CustomerRefNo', $request->getOrderId());
  145.         //Mage::log("No :".$request->getOrderId(),null,'usps.log');
  146.         $xml = $xmlWrap->{$rootNode}->asXML();
  147.         return $xml;
  148.     }
  149.  
  150.     /**
  151.      * Convert decimal weight into pound-ounces format
  152.      *
  153.      * @param float $weightInPounds
  154.      * @return array
  155.      */
  156.     protected function _convertPoundOunces($weightInPounds)
  157.     {
  158.         $weightInOunces = ceil($weightInPounds * self::OUNCES_POUND);
  159.         $pounds = floor($weightInOunces / self::OUNCES_POUND);
  160.         $ounces = $weightInOunces % self::OUNCES_POUND;
  161.         return array($pounds, $ounces);
  162.     }
  163.  
  164.     /**
  165.      * Form XML for international shipment request
  166.      * As integration guide it is important to follow appropriate sequence for tags e.g.: <FromLastName /> must be
  167.      * after <FromFirstName />
  168.      *
  169.      * @param Varien_Object $request
  170.      * @return string
  171.      */
  172.     protected function _formIntlShipmentRequest(Varien_Object $request)
  173.     {
  174.         $packageParams = $request->getPackageParams();
  175.         $height = $packageParams->getHeight();
  176.         $width = $packageParams->getWidth();
  177.         $length = $packageParams->getLength();
  178.         $girth = $packageParams->getGirth();
  179.         $packageWeight = $request->getPackageWeight();
  180.         if ($packageParams->getWeightUnits() != Zend_Measure_Weight::POUND) {
  181.             $packageWeight = Mage::helper('usa')->convertMeasureWeight(
  182.                 $request->getPackageWeight(),
  183.                 $packageParams->getWeightUnits(),
  184.                 Zend_Measure_Weight::POUND
  185.             );
  186.         }
  187.         if ($packageParams->getDimensionUnits() != Zend_Measure_Length::INCH) {
  188.             $length = round(Mage::helper('usa')->convertMeasureDimension(
  189.                 $packageParams->getLength(),
  190.                 $packageParams->getDimensionUnits(),
  191.                 Zend_Measure_Length::INCH
  192.             ));
  193.             $width = round(Mage::helper('usa')->convertMeasureDimension(
  194.                 $packageParams->getWidth(),
  195.                 $packageParams->getDimensionUnits(),
  196.                 Zend_Measure_Length::INCH
  197.             ));
  198.             $height = round(Mage::helper('usa')->convertMeasureDimension(
  199.                 $packageParams->getHeight(),
  200.                 $packageParams->getDimensionUnits(),
  201.                 Zend_Measure_Length::INCH
  202.             ));
  203.         }
  204.         if ($packageParams->getGirthDimensionUnits() != Zend_Measure_Length::INCH) {
  205.             $girth = round(Mage::helper('usa')->convertMeasureDimension(
  206.                 $packageParams->getGirth(),
  207.                 $packageParams->getGirthDimensionUnits(),
  208.                 Zend_Measure_Length::INCH
  209.             ));
  210.         }
  211.  
  212.         $container = $request->getPackagingType();
  213.         switch ($container) {
  214.             case 'VARIABLE':
  215.                 $container = 'VARIABLE';
  216.                 break;
  217.             case 'FLAT RATE ENVELOPE':
  218.                 $container = 'FLATRATEENV';
  219.                 break;
  220.             case 'FLAT RATE BOX':
  221.                 $container = 'FLATRATEBOX';
  222.                 break;
  223.             case 'RECTANGULAR':
  224.                 $container = 'RECTANGULAR';
  225.                 break;
  226.             case 'NONRECTANGULAR':
  227.                 $container = 'NONRECTANGULAR';
  228.                 break;
  229.             default:
  230.                 $container = 'VARIABLE';
  231.         }
  232.         $shippingMethod = $request->getShippingMethod();
  233.         list($fromZip5, $fromZip4) = $this->_parseZip($request->getShipperAddressPostalCode());
  234.  
  235.         // the wrap node needs for remove xml declaration above
  236.         $xmlWrap = new SimpleXMLElement('<?xml version = "1.0" encoding = "UTF-8"?><wrap/>');
  237.         $method = '';
  238.         $service = $this->getCode('service_to_code', $shippingMethod);
  239.         if ($service == 'Priority') {
  240.             $method = 'Priority';
  241.             $rootNode = 'PriorityMailIntlRequest';
  242.             $xml = $xmlWrap->addChild($rootNode);
  243.         } else if ($service == 'First Class') {
  244.             $method = 'FirstClass';
  245.             $rootNode = 'FirstClassMailIntlRequest';
  246.             $xml = $xmlWrap->addChild($rootNode);
  247.         } else {
  248.             $method = 'Express';
  249.             $rootNode = 'ExpressMailIntlRequest';
  250.             $xml = $xmlWrap->addChild($rootNode);
  251.         }
  252.  
  253.         $xml->addAttribute('USERID', $this->getConfigData('userid'));
  254.         $xml->addAttribute('PASSWORD', $this->getConfigData('password'));
  255.         $xml->addChild('Option');
  256.         $xml->addChild('Revision', self::DEFAULT_REVISION);
  257.         $xml->addChild('ImageParameters');
  258.         $xml->addChild('FromFirstName', $request->getShipperContactPersonFirstName());
  259.         $xml->addChild('FromLastName', $request->getShipperContactPersonLastName());
  260.         $xml->addChild('FromFirm', $request->getShipperContactCompanyName());
  261.         $xml->addChild('FromAddress1', $request->getShipperAddressStreet2());
  262.         $xml->addChild('FromAddress2', $request->getShipperAddressStreet1());
  263.         $xml->addChild('FromCity', $request->getShipperAddressCity());
  264.         $xml->addChild('FromState', $request->getShipperAddressStateOrProvinceCode());
  265.         $xml->addChild('FromZip5', $fromZip5);
  266.         $xml->addChild('FromZip4', $fromZip4);
  267.         $xml->addChild('FromPhone', $request->getShipperContactPhoneNumber());
  268.         if ($method != 'FirstClass') {
  269.             if ($request->getReferenceData()) {
  270.                 $referenceData = $request->getReferenceData() . ' P' . $request->getPackageId();
  271.             } else {
  272.                 $referenceData = $request->getOrderShipment()->getOrder()->getIncrementId()
  273.                     . ' P'
  274.                     . $request->getPackageId();
  275.             }
  276.             $xml->addChild('FromCustomsReference', 'Order #' . $referenceData);
  277.         }
  278.         $xml->addChild('ToFirstName', $request->getRecipientContactPersonFirstName());
  279.         $xml->addChild('ToLastName', $request->getRecipientContactPersonLastName());
  280.         $xml->addChild('ToFirm', $request->getRecipientContactCompanyName());
  281.         $xml->addChild('ToAddress1', $request->getRecipientAddressStreet1());
  282.         $xml->addChild('ToAddress2', $request->getRecipientAddressStreet2());
  283.         $xml->addChild('ToCity', $request->getRecipientAddressCity());
  284.         $xml->addChild('ToProvince', $request->getRecipientAddressStateOrProvinceCode());
  285.         $xml->addChild('ToCountry', $this->_getCountryName($request->getRecipientAddressCountryCode()));
  286.         $xml->addChild('ToPostalCode', $request->getRecipientAddressPostalCode());
  287.         $xml->addChild('ToPOBoxFlag', 'N');
  288.         $xml->addChild('ToPhone', $request->getRecipientContactPhoneNumber());
  289.         $xml->addChild('ToFax');
  290.         $xml->addChild('ToEmail');
  291.         if ($method != 'FirstClass') {
  292.             $xml->addChild('NonDeliveryOption', 'Return');
  293.         }
  294.         if ($method == 'FirstClass') {
  295.             if (stripos($shippingMethod, 'Letter') !== false) {
  296.                 $xml->addChild('FirstClassMailType', 'LETTER');
  297.             } else if (stripos($shippingMethod, 'Flat') !== false) {
  298.                 $xml->addChild('FirstClassMailType', 'FLAT');
  299.             } else{
  300.                 $xml->addChild('FirstClassMailType', 'PARCEL');
  301.             }
  302.         }
  303.         if ($method != 'FirstClass') {
  304.             $xml->addChild('Container', $container);
  305.         }
  306.         $shippingContents = $xml->addChild('ShippingContents');
  307.         $packageItems = $request->getPackageItems();
  308.         // get countries of manufacture
  309.         $countriesOfManufacture = array();
  310.         $productIds = array();
  311.         foreach ($packageItems as $itemShipment) {
  312.             $item = new Varien_Object();
  313.             $item->setData($itemShipment);
  314.  
  315.             $productIds[]= $item->getProductId();
  316.         }
  317.         $productCollection = Mage::getResourceModel('catalog/product_collection')
  318.             ->addStoreFilter($request->getStoreId())
  319.             ->addFieldToFilter('entity_id', array('in' => $productIds))
  320.             ->addAttributeToSelect('country_of_manufacture');
  321.         foreach ($productCollection as $product) {
  322.             $countriesOfManufacture[$product->getId()] = $product->getCountryOfManufacture();
  323.         }
  324.  
  325.         $packagePoundsWeight = $packageOuncesWeight = 0;
  326.         // for ItemDetail
  327.         foreach ($packageItems as $itemShipment) {
  328.             $item = new Varien_Object();
  329.             $item->setData($itemShipment);
  330.  
  331.             $itemWeight = $item->getWeight() * $item->getQty();
  332.             if ($packageParams->getWeightUnits() != Zend_Measure_Weight::POUND) {
  333.                 $itemWeight = Mage::helper('usa')->convertMeasureWeight(
  334.                     $itemWeight,
  335.                     $packageParams->getWeightUnits(),
  336.                     Zend_Measure_Weight::POUND
  337.                 );
  338.             }
  339.             if (!empty($countriesOfManufacture[$item->getProductId()])) {
  340.                 $countryOfManufacture = $this->_getCountryName(
  341.                     $countriesOfManufacture[$item->getProductId()]
  342.                 );
  343.             } else {
  344.                 $countryOfManufacture = '';
  345.             }
  346.             $itemDetail = $shippingContents->addChild('ItemDetail');
  347.             $itemDetail->addChild('Description', $item->getName());
  348.             $ceiledQty = ceil($item->getQty());
  349.             if ($ceiledQty < 1) {
  350.                 $ceiledQty = 1;
  351.             }
  352.             $individualItemWeight = $itemWeight / $ceiledQty;
  353.             $itemDetail->addChild('Quantity', $ceiledQty);
  354.             $itemDetail->addChild('Value', $item->getCustomsValue() * $item->getQty());
  355.             list($individualPoundsWeight, $individualOuncesWeight) = $this->_convertPoundOunces($individualItemWeight);
  356.             $itemDetail->addChild('NetPounds', $individualPoundsWeight);
  357.             $itemDetail->addChild('NetOunces', $individualOuncesWeight);
  358.             $itemDetail->addChild('HSTariffNumber', 0);
  359.             $itemDetail->addChild('CountryOfOrigin', $countryOfManufacture);
  360.  
  361.             list($itemPoundsWeight, $itemOuncesWeight) = $this->_convertPoundOunces($itemWeight);
  362.             $packagePoundsWeight += $itemPoundsWeight;
  363.             $packageOuncesWeight += $itemOuncesWeight;
  364.         }
  365.         $additionalPackagePoundsWeight = floor($packageOuncesWeight / self::OUNCES_POUND);
  366.         $packagePoundsWeight += $additionalPackagePoundsWeight;
  367.         $packageOuncesWeight -= $additionalPackagePoundsWeight * self::OUNCES_POUND;
  368.         if ($packagePoundsWeight + $packageOuncesWeight / self::OUNCES_POUND < $packageWeight) {
  369.             list($packagePoundsWeight, $packageOuncesWeight) = $this->_convertPoundOunces($packageWeight);
  370.         }
  371.  
  372.         $xml->addChild('GrossPounds', $packagePoundsWeight);
  373.         $xml->addChild('GrossOunces', $packageOuncesWeight);
  374.         if ($packageParams->getContentType() == 'OTHER' && $packageParams->getContentTypeOther() != null) {
  375.             $xml->addChild('ContentType', $packageParams->getContentType());
  376.             $xml->addChild('ContentTypeOther ', $packageParams->getContentTypeOther());
  377.         } else {
  378.             $xml->addChild('ContentType', $packageParams->getContentType());
  379.         }
  380.  
  381.         $xml->addChild('Agreement', 'y');
  382.         $xml->addChild('ImageType', 'PDF');
  383.         $xml->addChild('ImageLayout', 'ALLINONEFILE');
  384.         $xml->addChild('CustomerRefNo', $request->getOrderId());
  385.         //Mage::log("No :".$request->getOrderId(),null,'usps.log');
  386.         if ($method == 'FirstClass') {
  387.             $xml->addChild('Container', $container);
  388.         }
  389.         // set size
  390.         if ($packageParams->getSize()) {
  391.             $xml->addChild('Size', $packageParams->getSize());
  392.         }
  393.         // set dimensions
  394.         $xml->addChild('Length', $length);
  395.         $xml->addChild('Width', $width);
  396.         $xml->addChild('Height', $height);
  397.         if ($girth) {
  398.             $xml->addChild('Girth', $girth);
  399.         }
  400.  
  401.  
  402.         $xml = $xmlWrap->{$rootNode}->asXML();
  403.         return $xml;
  404.     }
  405. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement