Настройка Доставки При Использовании Нескольких Тк

[quote name=‘densvi’ timestamp=‘1436639577’ post=‘222567’]

Нижний Новгород, ему должны показать 2 пункта самовывоза ото 2-ух ТК с адресом, сроками и ценами в зависимости от веса груза.

[/quote]



Читайте документацию Аксиомуса и возможности их API, прыгать нужно от этого, а не от собственных желаний :)

[quote name='dbazhenov' timestamp='1436640155' post='222568']

Прикола в 4 разных запросах я не понял, в том числе нельзя сразу город указать и получить только пункты заданного города.

[/quote]



Возможно из-за того, что они сами потом обращаются к API соответствующих ТК, да и объем не маленький за один раз был бы.


[quote name='dbazhenov' timestamp='1436640155' post='222568']

Тоже самое и про стоимость доставки.

[/quote]



Да, стоимость доставки для каждой ТК для определенного города покупателя, определяется своим отдельным запросом. Тоже видимо по причине, что они сами обращаются по API к соответствующей ТК.



Вроде бы не должно это быть какой-то проблемой.


[quote name='dbazhenov' timestamp='1436640155' post='222568']

По каждому пункту у них есть название города и код города. Название города может не совпадать с тем, что введёт покупатель, например он введёт латинскими буквами или ошибку допустит.



Списка городов с кодами я не нашел.

[/quote]



Конечно же такая ситуация вполне возможна. Видимо надо делать какое-то соответствие. В модуле СДЭК в базу все города вроде бы записаны. Или как в Самовывозе по пунктам назначения, для которых маски городов можно указать.



Список городов с кодами для BoxBerry есть тут:

http://axiomus.ru/geo/boxberry.php



Для других ТК нет. Но их ведь можно получить при запросе.



Даниил, я еще не полностью понимаю все тонкости реализации в CS-Cart поэтому может и глупости какие-то говорю. Так что сорри, если что.

[quote name='densvi' timestamp='1436687599' post='222593']

Даниил, я еще не полностью понимаю все тонкости реализации в CS-Cart поэтому может и глупости какие-то говорю. Так что сорри, если что.

[/quote]



А причем здесь CS-Cart (тут без разницы какая CMS), всё крутится от возможностей API

[quote name='dbazhenov' timestamp='1436688074' post='222594']

А причем здесь CS-Cart (тут без разницы какая CMS), всё крутится от возможностей API

[/quote]



Даниил, тогда позвольте опишу некий алгоритм, как я себе вижу это:



0) Для начала я бы сделал в админке кнопку обновить список городов. По этой кнопке CMS обращается по API для каждой ТК, получает список городов с кодами, разбирает полученные xml и записывает в базу данных (её структуру придумать без проблем можно). Таким образом мы имеем БД со списком городов доставок для всех ТК, там же адреса пунктов самовывоза.


  1. Покупатель указывает город доставки. Должна работать некая маска (как сейчас можно сделать для пунктов назначения), которая бы устраняла простые ошибки в написании города (написание на английском, например и т.д.), а еще лучше привязываться к КЛАДР и при вводе города покупателем ему показываются подсказки из КЛАДР.


  2. С городом разобрались. Допустим, что он введен правильно или он выбран. На следующем шаге оформления покупатель выбирает, например, самовывоз. Ему должны показаться все доступные пункты самовывоза всех ТК в ранее выбранном городе.

    Для этого, ищем в нашей БД город. Находим. Берем оттуда код города. Формируем xml, обращаемся по API к каждой ТК и получаем стоимость услуг, далее выводим ПВЗ выбранного города, доп. инфу и стоимость. По аналогии с сегодняшним модулем “Самовывоз”.



    Как то так. Описанный алгоритм API Аксиомуса поддержит. А вот как это сделать в CS-Cart - большой вопрос для меня. Поэтому и написал, что всех тонкостей реализации в CS-Cart не знаю еще.

Densvi,



Обратитесь напрямую в Симтех - они только что закончили делать делать модуль интеграции с Аксиомусом для меня. Не думаю, что возьмут теперь дорого. Попросите установить его на какой-нибудь демо сервер, что бы Вы могли его протестить и посмотреть логику его работы. Все действия по формированию завки в Акисомус производятся в карточке самого зказа. Менеджер Антипова Екатерина.



Варианты заявок для переачи: Москва-Питер (доставка и самовывоз), DPD (доставка и самовывоз), Почта, Топделивери самовывоз.



По поводу ТопДеливери (я сам на этом накололся) - у Е-дост он есть в списке существующих ТК просто работающих в России, но расчет по ним они не производят.



По самовывозу - у меня реализовано теперь это следующим образом: я вручную создаю “расположение магазина” и к нему из списка подгруженных от Аксиомуса пунктов привязываю соответствие пункту DPD или ТопДеливери (Boxbery я не использую), ну или самого Акисомуса (если это Москва или СПб).

Вот, отлично.



А если хочется самому, то попытался объяснить как работать с API здесь:

Даниил, Супер видео. Будем копать дальше. Направление есть. Спасибо огромное за быстроту реакции, хотя и воскресенье сегодня.


[quote name=‘MrMaster’ timestamp=‘1436694454’ post=‘222602’]

По самовывозу - у меня реализовано теперь это следующим образом: я вручную создаю “расположение магазина” и к нему из списка подгруженных от Аксиомуса пунктов привязываю соответствие пункту DPD или ТопДеливери (Boxbery я не использую), ну или самого Акисомуса (если это Москва или СПб).

[/quote]



Вы вручную заводите несколько сотен расположений?

[quote name=‘densvi’ timestamp=‘1436705893’ post=‘222617’]

Даниил, Супер видео. Будем копать дальше. Направление есть. Спасибо огромное за быстроту реакции, хотя и воскресенье сегодня.

[/quote]



Понятно получилось? Страхов меньше стало? Работы много, понимаете теперь :) Даже в рамках одной компании нет единого стандарта (хотя привести к единому стандарту легко), что уж говорить о других доставках. Поэтому edost молодец, смог в один запрос всё объединить.

[quote name='dbazhenov' timestamp='1436707099' post='222618']

Понятно получилось? Страхов меньше стало? Работы много, понимаете теперь

[/quote]



Да, Даниил, по видео всё понятно. Страхов реально меньше стало. Теперь понятно хоть за что хвататься. Осталось теперь только правильно и в нужном месте вызвать это всё. Начну завтра разбираться и пробовать.

[quote name=‘densvi’ timestamp=‘1436708873’ post=‘222621’]

Да, Даниил, по видео всё понятно. Страхов реально меньше стало. Теперь понятно хоть за что хвататься. Осталось теперь только правильно и в нужном месте вызвать это всё. Начну завтра разбираться и пробовать.

[/quote]



Да, так же скриптом, вызывать и в цикле в базу записывать, можно прям функции из модуля “Поиск ближайших магазинов” использовать, которые создают точки в админке.



Останется решить два вопроса:

  1. Города
  2. Как определить какие точки выводить для покупателя.



    Я в этих вопросах в своё время пришёл к пунктам назначения и базе городов для автоподстановки. Как Вы решите не знаю. Успехов. Работы много при любом раскладе. Сводить все поля нужно и долго.

[quote name=‘densvi’ timestamp=‘1436705893’ post=‘222617’]

Вы вручную заводите несколько сотен расположений?

[/quote]

Да. Выходит примерно 200 пунктов (средне-крупные города). Но тут плюс в том, что есть возможность добавлять описание, схему прохода, режим работы и т.д., а заодно отображать пункты на карте, используя стандартный модуль Самовывоза.

Наверное можно, судя по видео Даниила, все пункты самовывоза загружать списком в “Расположение магазина”, но это скорее только для BoxBerry, так как у них передается вместе с адресом еще и gps координаты. DPD и ТопДеливери передают только адрес. Если я правильно понимаю, то для отображения на карте этого не достаточно.

Даниил, обнаружилась ошибочка. В видео вы используете функцию simplexml_load_string чтобы распарсить xml Ответ от сервера Axsiomusa



В результате в некоторых запросах, например, get_regions, на стр. 29 интеграционного гида, кода города нет, что и видно в видео. Однако, в ответе сервера Аксиомуса, ДО использования simplexml_load_string код города ЕСТЬ.



Вывод: эта функция не правильно парсит xml

[quote name=‘densvi’ timestamp=‘1436812074’ post=‘222765’]

Даниил, обнаружилась ошибочка. В видео вы используете функцию simplexml_load_string чтобы распарсить xml Ответ от сервера Axsiomusa



В результате в некоторых запросах, например, get_regions, на стр. 29 интеграционного гида, кода города нет, что и видно в видео. Однако, в ответе сервера Аксиомуса, ДО использования simplexml_load_string код города ЕСТЬ.



Вывод: эта функция не правильно парсит xml

[/quote]



Нет.



Просто функция fn_print_r плохо подходит для распечатки объектов, так как создана для другого. Используйте var_dump .



Да и видео я снимал о другом :) Как вы будете делать свой модуль и какие функции будете использовать - ваше дело , php.net в помощь :)



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

Попробовал var_dump - ситуация не изменилась. Просто добавился тип переменных. Кода города так и не появилось

[quote name='densvi' timestamp='1436817717' post='222771']

Попробовал var_dump - ситуация не изменилась. Просто добавился тип переменных. Кода города так и не появилось

[/quote]



Ну тогда используйте XmlReader например (http://php.net/manual/ru/book.xmlreader.php) , это уже детали.

Даниил, на деталях как правило часто всё и сыплется.

Мне кажется тут дело не в функциях fn_print_r; var_dump; print_r - скорее всего дело в самом формате ответа, в структуре xml ответа.



Если между тегами что-то стоит,то код города пропадает, если убрать оттуда наименование города, то появляется код города.



Либо формат (структура) не верный, либо все таки функция simplexml_load_string некорректно его обрабатывает.

Будем пробовать дальше.

[quote name='densvi' timestamp='1436819160' post='222777']

Даниил, на деталях как правило часто всё и сыплется.

Мне кажется тут дело не в функциях fn_print_r; var_dump; print_r - скорее всего дело в самом формате ответа, в структуре xml ответа.



Если между тегами что-то стоит,то код города пропадает, если убрать оттуда наименование города, то появляется код города.



Либо формат (структура) не верный, либо все таки функция simplexml_load_string некорректно его обрабатывает.

Будем пробовать дальше.

[/quote]



Оу. Я думаю Вы разберётесь. Это вообще не связано не с CS-Cart не с API аксиомуса, это чистый php . Тут Вам поможет google и документация по php . Функций для работы с XML много, попробуйте разные, это полезно.



Мне нравится XMLReader, например.

Всё просто оказывается. Просто после применения [color=#282828][font=arial, verdana, tahoma, sans-serif][size=3] simplexml_load_string [/size][/font][/color]надо обратиться к каждому элементу xml по имени и толькопотом печатать этоот элемент. Всё прекрасно работает. Спасибо Даниил.

Даниил, написал скриптик, которые берет результат запроса по API для Boxberry и работает с ним. Что сделал:

  1. добавляет пункты назначения
  2. добавляет “местоположение магазина”
  3. устанавливает связь между местоположением магазина и пунктом назначения на вкладке “самовывоз” у местоположения.



    в админке проверил - всё ОК - галки все стоят. В phpmyadmin проверил таблицы - всё ок, вроде.



    А дальше ерунда какая-то пошла. При оформлении заказа какой-бы город я не указывал, пункты самовывоза не показываются. Ну думаю, может что забыл. Посмотрел настройки способа доставки самовывоз, там все созданные местоположения в левой колонке, т.е. как выбранные. ОК.



    Лезу в файлик /app/addons/rus_pickup/Tygh/Shippings/Services/Pickup.php



    в нем нахожу такую строчку

<br /> $_stores = db_get_hash_array("SELECT $fields FROM ?:store_locations as a $join WHERE 1 $condition", &#39;store_location_id&#39;);<br />



делаю fn_print_die($_stores);



опс, а там только 9 магазинов (столько для Москвы я завел ранее руками). Сейчас для Москвы значительно больше местоположений.



Ладно, думаю, сделал следующее:

<br /> $my_zapros = db_quote("SELECT $fields FROM ?:store_locations as a $join WHERE 1 $condition", &#39;store_location_id&#39;);<br /> <br /> fn_print_r($my_zapros);<br />



в результате выдался SQL запрос. Я копирую его (предварительно заменив “?:” на “cscart”) в phpmyadmin и выполняю этот запрос.



И о чудо - мне выдались все местоположения в Москве - несколько десятков, а не 9 !!!



Выполнение в тупую этого запроса в файле Pickup.php выдает 9 магазинов.



Я в растерянности. Что делать? Где копать?

[quote name='densvi' timestamp='1436965836' post='223041']

Я в растерянности. Что делать? Где копать?

[/quote]



Таблица:

cscart_ult_object_sharing