Как добавить Fedex SmartPost в качестве варианта доставки?

Я хочу добавить FedEx SmartPost в качестве варианта доставки. Любая идея, что мне нужно сделать, чтобы выполнить это? Единственная информация, которую я нашел об этом, находится здесь https://drupal.org/node/793124, но похоже никто не решил эту проблему. Я готов изменить модуль ubercart fedex, если это необходимо.

Пока что я сделал:

  • Изменено RateService_v10.wsdl на RateService_v14.wsdl
  • Добавлен код в функцию uc_fedex_rate_request:

    $request['RequestedShipment']['SmartPostDetail'] = addSmartPostDetail();
    function addSmartPostDetail(){
      $smartPostDetail = array( 
         'Indicia' => 'PARCEL_SELECT',
         'AncillaryEndorsement' => 'CARRIER_LEAVE_IF_NO_RESPONSE',
         'SpecialServices' => 'USPS_DELIVERY_CONFIRMATION',
         'HubId' => 5087,
         'CustomerManifestID' => myid, 
       );
      return $smartPostDetail;
    }
    

В функции uc_fedex_quote я добавил оператор отладки сразу после:

  $response = uc_fedex_rate_request($packages, $origin, $destination);
  drupal_set_message('<pre>'. print_r($response, TRUE) .'</pre>');

В ответ я не получаю SmartPost в качестве опции.


person AllisonC    schedule 18.03.2014    source источник


Ответы (2)


Вот что мне пришлось сделать (примечание: я редактировал uc_fedex.module напрямую):

  • Сначала вы должны получить одобрение SmartPost для своей учетной записи.
  • Получите обновленный файл wsdl с https://www.fedex.com/us/developer/web-services/process.html?tab=tab1 и загрузите их на свой сервер.
  • Получите HubId от службы поддержки (мой был 5185)
  • Получите CustomerManifestID от службы поддержки клиентов
  • Измените код на RateService_v14.wsdl (около $client = new SoapClient...)
  • Измените версию на 14.

    $request['Version'] = array( 'ServiceId' => 'crs', 'Major' => '14', 'Intermediate' => '0', 'Minor' => '0', );

  • Добавьте следующий код:

    $request['RequestedShipment']['SmartPostDetail'] = addSmartPostDetail(); function addSmartPostDetail(){ $smartPostDetail = array( 'Indicia' => 'PARCEL_SELECT', 'AncillaryEndorsement' => 'CARRIER_LEAVE_IF_NO_RESPONSE', 'SpecialServices' => 'USPS_DELIVERY_CONFIRMATION', 'HubId' => yourhubid, 'CustomerManifestID' => yourmanifestid , ); вернуть $smartPostDetail; }

  • Добавьте в _uc_fedex_ground_services() следующее: 'SMART_POST' => t('FedEx Smart Post'),

  • Перейдите в admin/store/settings/quotes/methods/fedex и установите флажок «FedEx Smart Post».
person AllisonC    schedule 25.03.2014

Ответ AllisonC был очень полезным. Для тех, кто настраивает вызовы SmartPost API с помощью Drupal + Ubercart, вот как я построил ее решение, используя FedEx Shipping 7.x-2.0+23-dev.

  • Загрузите обновленный файл RateService_vXX.wsdl с http://www.fedex.com/us/developer/web-services/process.html?tab=tab1 (текущая версия — v18). Откройте файл wsdl в текстовом редакторе и убедитесь, что он подключается к производственному серверу FedEx (в настоящее время ws.fedex.com:443/web-services/). Загрузите этот файл в /uc_fedex/wsdl-production/.

  • Отредактируйте uc_fedex.module следующим образом (номера строк могут различаться в зависимости от того, как вы редактируете файл):

    1. Consider disable caching of SOAP WSDL while testing (line 19).
    2. Определите функцию addSmartPostDetail вне функции uc_fedex_quote следующим образом (я использовал строку 248):

      function addSmartPostDetail(){ $smartPostDetail = array('Indicia' => 'PARCEL_SELECT', 'HubId' => '5185', // используйте 5531 только для тестирования); вернуть $smartPostDetail; }

    3. Внутри функции uc_fedex_quote (строка 271) вызовите функцию addSmartPostDetail.

      $request['RequestedShipment']['SmartPostDetail'] = addSmartPostDetail();

    4. Добавьте следующее в массив _uc_fedex_ground_services() (строка 857):

      'SMART_POST' => t('Умная почта FedEx'),

    5. Определите размеры пакета (строка 544). Минимальные размеры контейнера SmartPost составляют 6 дюймов в длину, 4 дюйма в ширину и 1 дюйм в высоту, а аппаратные настройки модуля не соответствуют требованиям.

      'Размеры' => массив( 'Длина' => 6, 'Ширина' => 4, 'Высота' => 1, 'Единицы' => 'В', ),

    6. Я также вручную исправил файл .module с помощью патча по адресу https://www.drupal.org/node/1782298 чтобы избежать бесполезного сообщения "Исправимая фатальная ошибка", если запрос не работает правильно.
  • Перейдите в admin/store/settings/quotes/methods/fedex и установите флажок «FedEx Smart Post».

Моему клиенту нужно было установить условия отдельно для доставки на дом и Smart Post, и он не использовал какие-либо экспресс-услуги, поэтому я переместил фрагмент 'SMART_POST' => t('FedEx Smart Post') в массив _uc_fedex_express_services(), включенный метод FedEx Express, а затем установите соответствующие условия.

person Ryan Zook    schedule 23.07.2016