2014-12-23 5 views
2

Я использую Magento Enterprise.Суббота Вариант поставки Расширение ИБП Magento

Я пытаюсь тянуть субботу опцию доставки из UPS API на моей странице оформления заказа на веб-интерфейсе. На данный момент я не могу никуда с этим поработать. У меня есть опция, включенная администратором, и когда я пытаюсь вызвать функцию getAvailableMethods() и распечатать результат, я получаю опцию субботнего доставки в массиве, но я не могу получить эту опцию для отображения на интерфейсе. Я изменил UPS model, чтобы включить код доставки субботы (который после многих исследований я выяснил, что больше не работает так), но он все еще ничего не делает. Есть ли способ, которым я могу получить опцию доставки на моей странице проверки на внешнем интерфейсе?

Вот некоторые из кода, я использую

в моем UPS Model

я включил вариант доставки в субботу под моим originShipment массива

'originShipment'=>array(
       // United States Domestic Shipments 
       'United States Domestic Shipments' => array(
        '01' => Mage::helper('usa')->__('UPS Next Day Air'), 
        '02' => Mage::helper('usa')->__('UPS Second Day Air'), 
        '03' => Mage::helper('usa')->__('UPS Ground'), 
        '07' => Mage::helper('usa')->__('UPS Worldwide Express'), 
        '08' => Mage::helper('usa')->__('UPS Worldwide Expedited'), 
        '11' => Mage::helper('usa')->__('UPS Standard'), 
        '12' => Mage::helper('usa')->__('UPS Three-Day Select'), 
        '13' => Mage::helper('usa')->__('UPS Next Day Air Saver'), 
        '14' => Mage::helper('usa')->__('UPS Next Day Air Early A.M.'), 
        '54' => Mage::helper('usa')->__('UPS Worldwide Express Plus'), 
        '59' => Mage::helper('usa')->__('UPS Second Day Air A.M.'), 
        '65' => Mage::helper('usa')->__('UPS Saver'), 
        '33' => Mage::helper('usa')->__('UPS Saturday Delivery'), 
       ), 

и под моим методом массива

'method'=>array(
     '1DM' => Mage::helper('usa')->__('Next Day Air Early AM'), 
     '1DML' => Mage::helper('usa')->__('Next Day Air Early AM Letter'), 
     '1DA' => Mage::helper('usa')->__('Next Day Air'), 
     '1DAL' => Mage::helper('usa')->__('Next Day Air Letter'), 
     '1DAPI' => Mage::helper('usa')->__('Next Day Air Intra (Puerto Rico)'), 
     '1DP' => Mage::helper('usa')->__('Next Day Air Saver'), 
     '1DPL' => Mage::helper('usa')->__('Next Day Air Saver Letter'), 
     '2DM' => Mage::helper('usa')->__('2nd Day Air AM'), 
     '2DML' => Mage::helper('usa')->__('2nd Day Air AM Letter'), 
     '2DA' => Mage::helper('usa')->__('2nd Day Air'), 
     '2DAL' => Mage::helper('usa')->__('2nd Day Air Letter'), 
     '3DS' => Mage::helper('usa')->__('3 Day Select'), 
     'GND' => Mage::helper('usa')->__('Ground'), 
     'GNDCOM' => Mage::helper('usa')->__('Ground Commercial'), 
     'GNDRES' => Mage::helper('usa')->__('Ground Residential'), 
     'STD' => Mage::helper('usa')->__('Canada Standard'), 
     'XPR' => Mage::helper('usa')->__('Worldwide Express'), 
     'WXS' => Mage::helper('usa')->__('Worldwide Express Saver'), 
     'XPRL' => Mage::helper('usa')->__('Worldwide Express Letter'), 
     'XDM' => Mage::helper('usa')->__('Worldwide Express Plus'), 
     'XDML' => Mage::helper('usa')->__('Worldwide Express Plus Letter'), 
     'XPD' => Mage::helper('usa')->__('Worldwide Expedited'), 
     'SAT' => Mage::helper('usa')->__('Saturday Delivery'), 
    ), 
'containers_filter' => array(
       array(
        'containers' => array('00'), // Customer Packaging 
        'filters' => array(
         'within_us' => array(
          'method' => array(
           '01', // Next Day Air 
           '13', // Next Day Air Saver 
           '12', // 3 Day Select 
           '59', // 2nd Day Air AM 
           '03', // Ground 
           '14', // Next Day Air Early AM 
           '02', // 2nd Day Air 
           '33', // Saturday Delivery 
          ) 
         ), 
         'from_us' => array(
          'method' => array(
           '07', // Worldwide Express 
           '54', // Worldwide Express Plus 
           '08', // Worldwide Expedited 
           '65', // Worldwide Saver 
           '11', // Standard 
           '33', // Saturday Delivery 
          ) 
         ) 
        ) 
       ), 

И я включил все параметры от своего администратора. Теперь теоретически это должно привести к доставке субботы на мой интерфейс, если я не использую неправильный код для опции доставки в субботу. Я не уверен, что я делаю неправильно здесь.

Благодаря

+0

Добро пожаловать в SO. Можете ли вы опубликовать свой код в вопросе и объяснить, что вы пробовали? –

+0

Изменен мой вопрос, чтобы включить код. Надеюсь это поможет –

ответ

0

Это старый вопрос, но по-прежнему актуальный тот, кто решение не является легкодоступным в моем опыте.

Проблема с вышеуказанным кодом заключается в том, что предполагается, что в субботу доставка - это ставка от UPS. Однако в документации API ИБП они указывают, что это вместо этого вариант доставки. Если вы добавите этот вариант доставки в запрос API, он вернет ВСЕ ставки в этом запросе с применением субботы.

По этой причине решение этой проблемы в Magento состоит в том, чтобы сделать два запроса к API ИБП - один раз для ставок за пределами субботы и один раз для субботних тарифов.

Я собрал модуль, чтобы добавить эту функциональность, которую можно найти здесь.

https://github.com/PromInc/Magento-1.x-UPS-Saturday-Delivery

Но ради обеспечения мы понимаем, что происходит, я объясню код здесь (с использованием основных файлов для примера - конечно, не перезаписать файлы ядра !!!):

приложение/код/​​ядро ​​/ Mage/Доставка/Модель/Shipping.php

Добавить носитель в список носителей - копирование ИБП.

public function collectRates(Mage_Shipping_Model_Rate_Request $request) 
{ 
    ... 

    $limitCarrier = $request->getLimitCarrier(); 
    if (!$limitCarrier) { 
     $carriers = Mage::getStoreConfig('carriers', $storeId); 

     /* 
     For UPS Saturday Shipping, add an additional carrier that will have the saturday delivery option added in Shipping/Carrier/Ups.php 
     Saturday delivery is an option in the API request and applies to ALL shipping rates in that result. 
     So we make 2 requests to UPS - once for non-saturday and once for Saturday. 
     NOTE: system configuration used for getting Admin configured options 
     */ 
     if(Mage::getStoreConfig('shipping/saturday_delivery_ups/enabled') && in_array(date('w'), explode(",", Mage::getStoreConfig('shipping/saturday_delivery_ups/days_enabled')))) { 
      $carriers['upssaturday'] = $carriers['ups']; 
     } 

     foreach ($carriers as $carrierCode => $carrierConfig) { 
      $this->collectCarrierRates($carrierCode, $request); 
     } 
    } else { 
     ... 
    } 

    return $this; 
} 

Установите код носителя для нового носителя (upssaturday) для взлетов, чтобы гарантировать, что мы загрузить правильный класс и сделать запрос к ИБП.

Также установите переменную, чтобы отметить, что у этой несущей включена опция доставки в субботу.

public function collectCarrierRates($carrierCode, $request) 
{ 
    /* @var $carrier Mage_Shipping_Model_Carrier_Abstract */ 
    // $carrier = $this->getCarrierByCode($carrierCode, $request->getStoreId()); 
    $carrierCodeForLoad = $carrierCode; 
    if($carrierCode == 'upssaturday') { 
     $carrierCodeForLoad = 'ups'; 
    } 
    $carrier = $this->getCarrierByCode($carrierCodeForLoad, $request->getStoreId()); 

    if (!$carrier) { 
     return $this; 
    } 

    // Tell the UPS request to set the Saturday delivery option 
    if($carrierCode == 'upssaturday') { 
     $carrier->setSaturdayDelivery(true); 
    } 

    $carrier->setActiveFlag($this->_availabilityConfigField); 
    ... 
    return $this; 
} 

приложение/код/​​ядро ​​/ Mage/США/Модель/Доставка/Carrier/Ups.php

При анализе ответа XML, изменить имя метода кода и отображения, чтобы отразить, что это способ доставки в субботу.

protected function _parseXmlResponse($xmlResponse) 
{ 
    ... 
    } else { 
     if($this->getSaturdayDelivery()) { 
      $saturdayShippingMethods = explode(",", Mage::getStoreConfig('shipping/saturday_delivery_ups/allowed_methods')); 
     } 
     foreach ($priceArr as $method=>$price) { 
      if($this->getSaturdayDelivery() && !in_array($method, $saturdayShippingMethods)) { 
       continue; 
      } 

      $rate = Mage::getModel('shipping/rate_result_method'); 
      $rate->setCarrier('ups'); 
      $rate->setCarrierTitle($this->getConfigData('title')); 
      // $rate->setMethod($method); 
      $rate->setMethod($method . ($this->getSaturdayDelivery() ? '_sat' : '')); 
      // $method_arr = $this->getShipmentByCode($method); // string 
      $method_arr = $this->getShipmentByCode($method) . ($this->getSaturdayDelivery() ? ' Saturday' : ''); // string 
      $rate->setMethodTitle($method_arr); 
      $rate->setCost($costArr[$method]); 
      $rate->setPrice($price); 

      $result->append($rate); 
     } 
    } 
    return $result; 
} 

Добавить возможность доставки в субботу в XML-запрос для получения котировок, если включена для этой ставки.

protected function _getXmlQuotes() 
{ 
    .... 
    if ($serviceCode !== null) { 
     $xmlRequest .= "<Service>" . 
      "<Code>{$serviceCode}</Code>" . 
      "<Description>{$serviceDescription}</Description>" . 
      "</Service>"; 
    } 

if($this->getSaturdayDelivery()) { 
    $xmlRequest .= <<< XMLRequest 
<ShipmentServiceOptions> 
    <SaturdayDelivery/> 
</ShipmentServiceOptions> 
XMLRequest; 
} 
    $xmlRequest .= <<< XMLRequest 
    <Shipper> 
XMLRequest; 
    ... 
} 
Смежные вопросы