Выдана 110031 лицензия

Авторизация в модуле "Доставка "СДЭК""

Авторизация в модуле "Доставка "СДЭК""
#
Barbaros
Тарифы СДЭК для ИМ с договором получаются очень интересными, однако с недавнего времени стандартный модуль "Доставка СДЭК" с ними не работает. Для учета индивидуальных тарифов и условий доставок служба доставки СДЭК требует указывать параметры authLogin и secure в запросе, чего в стандартном модуле нет(http://www.hostcms.ru/shop/market/modules/store/delivery5/).

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

Вот стандартный код обработчика
<?php
class Shop_Delivery_Handler30 extends Shop_Delivery_Handler
{
   // местоположение магазина (отправки), почтовый индекс, Ростов-на-Дону
   private $_from='344000';
   // весовой коэффициент (расчет ведется в килограммах)
   private $_coefficient = 0.001;
   // список тарифов
   private $_tariffList = array(
      136=>'Посылка склад-склад',
   );
   
   private function _getData($aParams)
   {
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, 'http://api.edostavka.ru/calculator/calculate_price_by_json.php');
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
      curl_setopt($ch, CURLOPT_POST, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($aParams));
      curl_setopt($ch, 156, 5000);
      $oResponse = curl_exec($ch);
      curl_close($ch);
      return json_decode($oResponse);
   }
   
   public function execute()
   {
      $fOrderWeight = $this->_weight * $this->_coefficient;

      if($fOrderWeight == 0)
      {
         throw new Exception("Неправильный вес (Вес равен нулю)");
      }
      
      if($this->_postcode == '')
      {
         throw new Exception("Индекс места назначения не указан");
      }
      
      $aRetObjs = array();
      
      if(!is_null($this->_shopCountry->id) && $this->_shopCountry->id == 175)
      {
         foreach($this->_tariffList as $tariffId => $tariffDescription)
         {
            $oResponse = $this->_getData(array('version'=>'1.0','tariffId'=>$tariffId,'senderCityPostCode'=>$this->_from,'receiverCityPostCode'=>$this->_postcode,'goods'=>array(0=>array('weight'=>$fOrderWeight,'volume'=>(($this->_volume) ? $this->_volume * pow(10, -9) : 1)))));

            if(is_object($oResponse) && property_exists($oResponse, 'result'))
            {
               $oCurrentDeliveryType = new StdClass();
               $oCurrentDeliveryType->price = floatval($oResponse->result->price);
               $oCurrentDeliveryType->description = $tariffDescription . " Минимальный срок доставки: {$oResponse->result->deliveryPeriodMin}, максимальный: {$oResponse->result->deliveryPeriodMax} дней";
               $aRetObjs[] = $oCurrentDeliveryType;
            }
         }
      }
      
      return $aRetObjs;
   }
}


Информация с сайта СДЭК:
Цитата:
"Идентификация ИМ осуществляется двумя параметрами: учетная запись account и секретный код secure_password.
Для обеспечения безопасности при передаче/запросе данных ИМ должен передавать значение поля secure,  вычисляемое по алгоритму:
secure ​= m​d5(date.'&'.secure_password), где
secure_password — секретный код, предоставляемый СДЭКом,
date — дата документа (для всех запросов ­ значение параметра Date xml­запроса, кроме запроса
«Статусы заказов» в формате get­запроса, где используется значение параметра DateFirst).  
Во всех модулях дата_время передается в формате UTC( 0000­00­00T00:00:00 ), если иное не
указано в описании. "
www.beregusha.com

ПрофильЦитировать выделенное19.08.2016 13:53:28 • Сообщений: 55
Re: Авторизация в модуле "Доставка "СДЭК""
#
HostCMS
Модератор
Barbaros,
если у вас активен период поддержки рекомендую обратиться в поддержку с данными доступа к СДЭК и ссылкой на тему.

ПрофильЦитировать выделенное22.08.2016 08:52:25 • Сообщений: 15541
Re: Авторизация в модуле "Доставка "СДЭК""
#
Barbaros
HostCMS писал(а):
если у вас активен период поддержки рекомендую обратиться в поддержку с данными доступа к СДЭК и ссылкой на тему.

Спасибо за ответ. Техподдержка такие вопросы не решает. С форумчанами договорился. Уже сделали!
www.beregusha.com

ПрофильЦитировать выделенное23.08.2016 23:34:44 • Сообщений: 55
Re: Авторизация в модуле "Доставка "СДЭК""
#
EZ-Web
ну так делитесь решением.
не у Вас одного, думается, проблема со СДЭКом возникнет
Знания имеют свои пределы, и только глупость человеческая не знает границ...

ПрофильЦитировать выделенное30.08.2016 19:24:22 • Сообщений: 133
Re: Авторизация в модуле "Доставка "СДЭК""
#
Barbaros
EZ-Web писал(а):
ну так делитесь решением.
не у Вас одного, думается, проблема со СДЭКом возникнет

Дело в том, что я не знаю что конкретно и где сделали. Я доступ предоставил пользователю Kotoff.
www.beregusha.com

ПрофильЦитировать выделенное02.09.2016 21:02:11 • Сообщений: 55
Re: Авторизация в модуле "Доставка "СДЭК""
#
alexpimnev
<?php
class Shop_Delivery_HandlerXXX extends Shop_Delivery_Handler
{
   private $_authLogin = 'ЛОГИН_МНОГО_БУКВ_ЦИФР_КОТОРЫЙ_ДАЕТ_САМ_СДЭК';
   private $_authPassword = 'ПАРОЛЬ_МНОГО_БУКВ_ЦИФР_КОТОРЫЙ_ДАЕТ_САМ_СДЭК';
   public $dateExecute;
   // местоположение магазина (отправки), почтовый индекс, Ростов-на-Дону
   private $_from='344000';
   // весовой коэффициент (расчет ведется в килограммах)
   private $_coefficient = 0.001;
   // список тарифов
   private $_tariffList = array(
      1=>'Экспресс лайт дверь-дверь',
      3=>'Супер-экспресс до 18',
      4=>'Рассылка',
      5=>'Экономичный экспресс склад-склад',
      7=>'Международный экспресс документы',
      8=>'Международный экспресс грузы',
      10=>'Экспресс лайт склад-склад',
      11=>'Экспресс лайт склад-дверь',
      12=>'Экспресс лайт дверь-склад',
      15=>'Экспресс тяжеловесы склад-склад',
      16=>'Экспресс тяжеловесы склад-дверь',
      17=>'Экспресс тяжеловесы дверь-склад',
      18=>'Экспресс тяжеловесы дверь-дверь',
      57=>'Супер-экспресс до 9',
      58=>'Супер-экспресс до 10',
      59=>'Супер-экспресс до 12',
      60=>'Супер-экспресс до 14',
      61=>'Супер-экспресс до 16',
      62=>'Магистральный экспресс склад-склад',
      63=>'Магистральный супер-экспресс склад-склад',
      66=>'Блиц-экспресс 01',
      67=>'Блиц-экспресс 02',
      68=>'Блиц-экспресс 03',
      69=>'Блиц-экспресс 04',
      70=>'Блиц-экспресс 05',
      71=>'Блиц-экспресс 06',
      72=>'Блиц-экспресс 07',
      73=>'Блиц-экспресс 08',
      74=>'Блиц-экспресс 09',
      75=>'Блиц-экспресс 10',
      76=>'Блиц-экспресс 11',
      77=>'Блиц-экспресс 12',
      78=>'Блиц-экспресс 13',
      79=>'Блиц-экспресс 14',
      80=>'Блиц-экспресс 15',
      81=>'Блиц-экспресс 16',
      82=>'Блиц-экспресс 17',
      83=>'Блиц-экспресс 18',
      84=>'Блиц-экспресс 19',
      85=>'Блиц-экспресс 20',
      86=>'Блиц-экспресс 21',
      87=>'Блиц-экспресс 22',
      88=>'Блиц-экспресс 23',
      89=>'Блиц-экспресс 24'
   );
   
   private function _getData($aParams)
   {
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, 'http://api.edostavka.ru/calculator/calculate_price_by_json.php');
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
      curl_setopt($ch, CURLOPT_POST, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($aParams));
      curl_setopt($ch, 156, 5000);
      $oResponse = curl_exec($ch);
      curl_close($ch);
      return json_decode($oResponse);
   }
   
   public function execute()
   {
      $this->dateExecute = date('Y-m-d');

      $fOrderWeight = $this->_weight * $this->_coefficient;

      if($fOrderWeight == 0)
      {
         throw new Exception("Неправильный вес (Вес равен нулю)");
      }
      
      if($this->_postcode == '')
      {
         throw new Exception("Индекс места назначения не указан");
      }
      
      $aRetObjs = array();
      
      if(!is_null($this->_shopCountry->id) && $this->_shopCountry->id == 175)
      {
         foreach($this->_tariffList as $tariffId => $tariffDescription)
         {
            $oResponse = $this->_getData(array('version'=>'1.0','dateExecute'=>$this->dateExecute,'authLogin'=>$this->_authLogin,'secure'=>$this->_getSecureAuthPassword(),tariffId'=>$tariffId,'senderCityPostCode'=>$this->_from,'receiverCityPostCode'=>$this->_postcode,'goods'=>array(0=>array('weight'=>$fOrderWeight,'volume'=>(($this->_volume) ? $this->_volume * pow(10, -9) : 1)))));

            if(is_object($oResponse) && property_exists($oResponse, 'result'))
            {
               $oCurrentDeliveryType = new StdClass();
               $oCurrentDeliveryType->price = floatval($oResponse->result->price);
               $oCurrentDeliveryType->description = $tariffDescription . " Минимальный срок доставки: {$oResponse->result->deliveryPeriodMin}, максимальный: {$oResponse->result->deliveryPeriodMax} дней";
               $aRetObjs[] = $oCurrentDeliveryType;
            }
         }
      }
      
      return $aRetObjs;
   }

   private function _getSecureAuthPassword()
   {
      return md5($this->dateExecute . '&' . $this->_authPassword);
   }

}


www.morozovpimnev.ru - дизайн сайтов, фирменных стилей | Создание мобильных приложений iPhone, iPad, Android

ПрофильЦитировать выделенное05.09.2016 10:25:20 • Сообщений: 480
Re: Авторизация в модуле "Доставка "СДЭК""
#
proskating
Почему-то решение Alexpimnev не работает, при этом не выдает ошибок


<?php
/*
   Доставка СДЭК.
*/
class Shop_Delivery_Handler34 extends Shop_Delivery_Handler
{
   private $_authLogin = 'ЛОГИН';
   private $_authPassword = 'ПАРОЛЬ';
   public $dateExecute;
   
   // Местоположение магазина (отправки), почтовый индекс
   private $_from='195176';
   
   // Весовой коэффициент (расчет ведется в килограммах)
   private $_coefficient = 0.001;
   
   // список тарифов
   private $_tariffList = array(
      1=>'Экспресс лайт дверь-дверь',
      3=>'Супер-экспресс до 18',
      10=>'Экспресс лайт склад-склад',
      11=>'Экспресс лайт склад-дверь',
      12=>'Экспресс лайт дверь-склад',
      41=>'Супер-экспресс до 11',
      42=>'Супер-экспресс до 13',
      43=>'Супер-экспресс до 19',            
      57=>'Супер-экспресс до 9',
      58=>'Супер-экспресс до 10',
      59=>'Супер-экспресс до 12',
      60=>'Супер-экспресс до 14',
      61=>'Супер-экспресс до 16',
      136=>'Посылка склад-склад',
      137=>'Посылка склад-дверь',
      138=>'Посылка дверь-склад',
      139=>'Посылка дверь-дверь'
   );
  
   private function _getData($aParams)
   {
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, 'http://api.edostavka.ru/calculator/calculate_price_by_json.php');
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
      curl_setopt($ch, CURLOPT_POST, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($aParams));
      curl_setopt($ch, 156, 5000);
      $oResponse = curl_exec($ch);
      curl_close($ch);
      return json_decode($oResponse);
   }
  
   public function execute()
   {
      $fOrderWeight = $this->_weight * $this->_coefficient;

      if($fOrderWeight == 0)
      {
         throw new Exception("Неправильный вес (Вес равен нулю)");
      }

      if($this->_postcode == '')
      {
         throw new Exception("Индекс места назначения не указан");
      }

      $aRetObjs = array();

      if(!is_null($this->_shopCountry->id) && $this->_shopCountry->id == 175)
      {
         foreach($this->_tariffList as $tariffId => $tariffDescription)
         {
            $oResponse = $this->_getData(array('version'=>'1.0','dateExecute'=>$this->dateExecute,'authLogin'=>$this->_authLogin,'secure'=>$this->_getSecureAuthPassword(),'tariffId'=>$tariffId,'senderCityPostCode'=>$this->_from,'receiverCityPostCode'=>$this->_postcode,'goods'=>array(0=>array('weight'=>$fOrderWeight,'volume'=>(($this->_volume) ? $this->_volume * pow(10, -9) : 1)))));

            if(is_object($oResponse) && property_exists($oResponse, 'result'))
            {
               $oCurrentDeliveryType = new StdClass();
               $oCurrentDeliveryType->price = floatval($oResponse->result->price);
               $oCurrentDeliveryType->description = $tariffDescription . " Минимальный срок доставки: {$oResponse->result->deliveryPeriodMin}, максимальный: {$oResponse->result->deliveryPeriodMax} дней";
               $aRetObjs[] = $oCurrentDeliveryType;
            }
         }
      }
      
      return $aRetObjs;
   }

   private function _getSecureAuthPassword()
   {
      return md5($this->dateExecute . '&' . $this->_authPassword);
   }
}

ПрофильЦитировать выделенное25.11.2016 15:44:18 • Сообщений: 6
Re: Авторизация в модуле "Доставка "СДЭК""
#
alexpimnev
proskating,
логин и пароль не от личного кабинета СДЭК используете, а полученные и сгенерированные ключи от ТП СДЭКа?
www.morozovpimnev.ru - дизайн сайтов, фирменных стилей | Создание мобильных приложений iPhone, iPad, Android

ПрофильЦитировать выделенное25.11.2016 17:41:55 • Сообщений: 480
Re: Авторизация в модуле "Доставка "СДЭК""
#
zefs
у меня выдает ошибку решение от alexpimnev.

Parse error: syntax error, unexpected ''=>$tariffId,'' (T_CONSTANT_ENCAPSED_STRING), expecting ')' in /var/www/u0286449/data/www/rapala.su/hostcmsfiles/shop/delivery/handler34.php on line 95

логин и пароль  полученные и сгенерированные ключи от ТП СДЭКа

куда копать?

ПрофильЦитировать выделенное26.01.2017 01:50:52 • Сообщений: 48
Re: Авторизация в модуле "Доставка "СДЭК""
#
EugenyP
zefs
ошибка в обработчике доставки на строке 95
HostDev.pw - модули для HostCMS

ПрофильЦитировать выделенное26.01.2017 05:49:28 • Сообщений: 650
Авторизация