Пытаюсь разобраться с созданием своего расчета доставки с помощью самописной службы доставки. Задача не обращаться к стороннему API, а просто обрабатывать данные и возвращать цену, по типу модуля самовывоза (он тоже как я понял в виде службы доставки сделан).
Структуру файлов, запись в базу создал, служба появилась в админке и даже можно запустить тест, но тест возвращает ошибку “служба не настроена”.
Собственно пока весь модуль службы состоит из файла с классом службы. В качестве рыбы класса взял класс самовывоза удалив естественно все по максимуму. Пытаюсь как-то заставить его работать, но такое ощущение что функции класса просто не выполняются даже prepareData ничего не выведет если из нее попытаться распечатать fn_print_r например.
Вот как выглядит файл с классом (название класса соответствует названию файла)
Взял за основу swisspost из ядра. Убрал все лишнее сделал класс, по идее должен всегда возвращать цену 1000, но как и раньше пишет сервис не настроен. Создается впечатление что дело не в классе может ,а в чем тогда еще?
Вот класс ниже. Я так понимаю функция getSimpleRates() должна возвращать значение цены. прилагаю и сам модуль. deon_shipping.zip (3,6 КБ)
<?php
namespace Tygh\Shippings\Services;
use Tygh\Shippings\IService;
use Tygh\Registry;
class deon_shipping implements IService
{
private $_allow_multithreading = false;
public function allowMultithreading()
{
return $this->_allow_multithreading;
}
public function prepareData($shipping_info)
{
$this->_shipping_info = $shipping_info;
}
public function processResponse($response)
{
return $response;
}
public function processErrors($response)
{
return null;
}
public function getRequestData()
{
return null;
}
public function getSimpleRates()
{
$return = array(
'cost' => false,
'error' => false,
);
$return['cost']=1000;
return $return;
}
public static function getInfo()
{
return array(
'name' => __('deon_shipping'),
'tracking_url' => '#'
);
}
}
Вы когда устанавливаете модуль, регистрируете так называемый «Провайдер доставки», создайте тестовый способ доставки или измените существующий, чтобы у него в настройках стояло «Расчёт в режиме реального времени» и там выберите свой модуль.
Если все получится - дайте знать
При тесте показывает, а чтоб в корзине показывало надо было оказывается галочку поставить в настройках способа доставки просто во вкладке с ценами. Спасибо за наводку по классу.
Допишу вопрос сюда, т.к. касается службы доставки.
В класс передается системой массив исходных данных $shipping_info. Помимо всего прочего данные содержат информацию о товарах, и вот я не могу понять что за номера там указаны? Судя по всему это не product_id. Тогда что это и как получить product_id этих товаров? Хочу вытащить доп информацию о товарах в свой расчет. На скрине ниже выделил эти коды товаров
Я посмотрел и получается что эти коды в shopping info разные исходя из места откуда расчёт вызывается. Например если расчёт доставки из карточки товара вызывается то там product_id сразу, если из редактирования заказа то там код товара из таблицы orders-detail, если из чекаута то из другой таблицы. Получается нужно определять откуда вызывается расчет. А как это правильно сделать? Может как-то определять какой dispatch текущий или как?
Когда расчёт доставки идёт из карточки товара то товар по сути не в корзине ещё и в shipping info тогда product_id отдаются. Можно как-то понять (определить) на какой страничке расчёт доставки вызван? Мне просто нужно определить по саrt_id соответствующий ему product_id чтобы потом инфу о товаре подтянуть
Да, уже увидел, в сессии забираю cart. А вот когда расчёт запускается из карточки товара надо shipping_info иначе обрабатывать тк там сразу product_id передаётся и его не надо уже конвертировать. Пока задумался как программно в классе доставки определить что расчёт вызван из карточки товара и искать product_id через cart не надо