Суббота Вариант доставки UPS расширение Magento

Я использую Magento Enterprise.

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

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

in my 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
                            )
                        )
                    )
                ),

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

Спасибо


person Marco Spijkerman    schedule 23.12.2014    source источник
comment
Добро пожаловать в СО. Можете ли вы опубликовать свой код в вопросе и объяснить, что вы пробовали?   -  person Greg the Incredulous    schedule 24.12.2014
comment
Изменил мой вопрос, чтобы включить код. Надеюсь это поможет   -  person Marco Spijkerman    schedule 25.12.2014


Ответы (1)


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

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

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

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

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

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

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

Добавить перевозчика в список перевозчиков - копирование UPS.

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) на ups, чтобы убедиться, что мы загрузили правильный класс и отправили запрос в UPS.

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

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

app/code/core/Mage/Usa/Model/Shipping/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;
    ...
}
person PromInc    schedule 01.05.2017