2014-12-23 2 views
2

사용 중 Magento 기업입니다. 토요일 배송 옵션 UPS 확장 Magento

나는 프론트 엔드에 내 체크 아웃 페이지에서 UPS API에서 토요일 배달 옵션을 끌어하려합니다. 나는 그 순간에 어느 곳으로도 갈 수없는 것처럼 보입니다. 나는 관리자에게 옵션을 활성화 시켰고 getAvailableMethods() 함수를 호출하여 결과를 인쇄하려고 할 때 배열에서 토요일 전달 옵션을 얻지 만 프론트 엔드에 표시하는 옵션을 얻을 수 없습니다. 나는 토요일 배달 코드 을 포함하도록 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'), 
       ), 

에서 내 방법 배열에서 내 UPS Model

내가 포함 한 토요일 배달 옵션에

을 사용하고 코드의 일부이다

'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

안녕하세요. 질문에 코드를 게시하고 시도한 것을 설명 할 수 있습니까? –

+0

코드를 포함하도록 제 질문을 수정했습니다. 희망이 도움이 –

답변

0

이 오래된 질문이지만, 여전히 해결책은 내 경험에서 쉽게 사용할 수 없습니다입니다 관련 하나.

위 코드의 문제는 토요일 배달이 UPS의 요금이라고 가정합니다. 그러나 UPS API 문서에서는 배송 옵션이라고 설명합니다. 이 배송 옵션을 API 요청에 추가하면 토요일 배송이 적용된 해당 요금의 모든 요금이 반환됩니다. 한 번이 아닌 토요일 요금에 한 번 토요일 요금에 대한 - 마 젠토에서이 문제에 대한 해결책이 UPS API에 두 개의 요청을하는 것입니다 이유로

.

여기에 나와있는 기능을 추가하기위한 모듈을 만들었습니다.

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

그러나 보장하기 위해 우리는 내가 여기에 코드를 설명 할 것이다 무슨 일이 일어나고 있는지 이해 (예제는 코어 파일을 사용하여 - 물론 핵심 파일을 덮어 쓰지 않습니다!) UPS를 복사 -

응용 프로그램/코드/코어/마법사/배송/모델/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; 
} 

은 우리가 올바른 클래스를로드 및 UPS에 대한 요청을 보장하기 위해 에 새로운 캐리어 (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; 
} 

응용 프로그램/코드/코어/마법사/미국/모델/배송/캐리어/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; 
    ... 
} 
관련 문제