@Shiriaev

Как передать данные с фронта в метод доставки в Magento 2?

Наглухо застрял с одной задачей, связанной с кастомным методом доставки в магазине на Magento 2. Потратил уже неприлично много времени на поиски решения, но воз и ныне там.

Итак, есть кастомный метод доставки. В корзине реализован выбор точки самовывоза при помощи виджета, представленного службой доставки. Виджет возвращает разные данные, зависящие от выбранной точки: ее адрес, стоимость доставки в зависимости от веса посылки и пр. Эти данные я добавляю в объект quote.pickpoint при помощи observable. И вот тут сама задача: передать полученные данные в способ доставки, чтобы выбрать оттуда необходимые данные, установить стоимость доставки. Способ доставки получает данные в виде Magento\Quote\Model\Quote\Address\RateRequest. Вопрос: как добавить мои кастомные данные в данный объект?

Сначала я пошел по пути формирования extension attributes для Magento\Checkout\Api\Data\ShippingInformationInterface. И у меня получилось передать данные, НО. JS функция getRates отрабатывает раньше чем saveShippingInformation. И получается, что методы доставки возвращаются с пустым значением, и нормальная стоимость доставки оказывается только в Totals, соотвественно, стоимость доставки не попадает в результирующий объект Order.

Подскажите плиз, какой из интерфейсов нужно расширить аттрибутами, чтобы это заработало. Или мой подход в корне неправильный, и все это делается иначе?

Всем заранее спасибо!
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
@Shiriaev Автор вопроса
Перекопал исходники Мадженты, кажется нашел решение. Расширять нужно интерфейс Magento\Quote\Api\Data\AddressInterface
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@CodeKeeper
Symfony/Magento developer
Нужно делать еще один метод доставки. Именно метод доставки отвечает за расчет доставки для заказа.
https://inchoo.net/magento-2/creating-a-shipping-m...
https://www.mageplaza.com/magento-2-create-shippin...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы