retailcrm / api-client-go

Go client for retailCRM API
http://www.retailcrm.ru
MIT License
3 stars 21 forks source link

Delivery order to dpd #33

Closed god1dog closed 4 years ago

god1dog commented 4 years ago

I can not fill in the fields for dpd delivery: Fields locked, selfPickup, payerType not in api and golang types Field deliveryType not in golang types

Neur0toxine commented 4 years ago

Hello!

Can you please elaborate how exactly you want to use these fields you marked as nonexistent in the API? It'll be easier to solve this issue with more information.

Also, about deliveryType field - we wil add it in the next release.

Thanks!

god1dog commented 4 years ago

По описанию https://help.retailcrm.ru/delivery_data_ru.html эти поля я могу только получить, но изменять я их могу только из интерфейса но мне нужно полное взаимодействие с API locked bool Не отправлять данные в службу доставки selfPickup bool Самопривоз на терминал payerType string Плательщик за доставку (sender, receiver)

Плюс в общем типе OrderDeliveryData отсутствует множество полей для dpd доставки, на данный момент для меня актуальны поля pickuppointId, tariff

gwinn commented 4 years ago

Для конкретных доставок структуры в библиотеке не заводились и вероятнее всего не будут, только общие поля. В целом можно самостоятельно в рамках вашего проекта добавить недостающие структуры и использовать их совместно с библиотекой, относительно доступности полей на редактирование - https://help.retailcrm.ru/delivery_data_ru.html, то тут pickuppointId доступен для редактирования, tariffName только на чтение

payerType в библиотеке есть, selfPickup и locked рассмотрим на добавление

god1dog commented 4 years ago

Сейчас отправляю через ваш клиент свою структуру доставки. На счет структуры конкретной доставки вижу что вы отказались заводить тип для dpd давайте хоть изменим OrderDeliveryData на interface{} (решение конечно костыльное) но как с данными доставки взаимодействовать если это будет отдельное подключение то и смысла в методе createOrder() нет с точки зрения консистентности данных

Просто заметил что у вас дока сырая по dpd.

  1. tariffName только на чтение в данный момент использую не документированное поле deliveryCode (в доке оно именуется tariff но с ним у меня не работает выбор тарифа)
  2. Поле payerType не хочет работать со значениями sender, receiver значение подставляется всегда по умолчанию из настроек dpd
Neur0toxine commented 4 years ago

В новой версии проблема решена. Тип поля с данными доставки не поменялся, но добавлена возможность добавления любых кастомных полей в это поле. Базовые данные доставки находятся в структуре OrderDeliveryDataBasic, которая включена в OrderDeliveryData. В OrderDeliveryData добавлено поле AdditionalFields с типом map[string]interface{}. Все значения, добавленные в AdditionalData в результате маршалинга окажутся в данных доставки.

Пример:

OrderDeliveryData{
    OrderDeliveryDataBasic: OrderDeliveryDataBasic{
        TrackNumber: "track",
        },
    AdditionalFields: map[string]interface{}{
        "locked": true,
    },
}

после маршалинга превратится в JSON следующего вида

{
  "locked": true,
  "trackNumber": "track"
}

Это работает и в обратную сторону, т.е. демаршалинг JSON'а выше даст ровно ту же структуру, из которой получился данный JSON.