Code Monkey home page Code Monkey logo

russianpost-sdk's Issues

Как нам обсустроить API отправки

Предполагается что-то типа:

$api->service->cleanPhone('89012345678');
$api->service->cleanAddress('Красноярск, Добрых Комбайнёров, 587');

$api->orders->create(new InputOrder(...));
$api->orders->find('56445645645');

и так далее.

Корневой класс:

/**
 * @property-read Orders $orders
 * @property-read Service $services
 * @property-read Shipments $shipments
 * ...
 */
class Api
{
    // ...
}

cc @greabock @krylov123

Поддержка Guzzle 7

Всем привет.
Планируется апнуть guzzle до 7? А то у меня все проекты на 7ой версии работают, соответственно, нет возможности использовать ваш SDK :(

Реализация API Отправки

Данные

  • Нормализация ФИО
  • Нормализация адреса
  • Нормализация телефона
  • Расчёт стоимости
  • Неблагонадёжный получатель
  • Отображение баланса

Настройки

  • Текущие настройки пользователя

Заказы

  • Создание
  • Поиск по идентификатору магазина
  • Поиск по идентификатору Почты России
  • Редактирование
  • Удаление
  • Возврат в «Новые»

Партии

  • Создание партии заказов
  • Изменение дня отправки партии в ОПС
  • Перенос заказов в партию
  • Добавление заказов в партию
  • Удаление заказов из партии
  • Запрос данных о заказах в партии
  • Поиск партии по наименованию
  • Поиск всех партий
  • Поиск заказов по ШПИ
  • Поиск заказа по идентификатору Почты России

Документы

  • Генерация документов для партии
  • Генерация документов для заказа
  • Генерация акта осмотра содержимого
  • Генерация Ф7п
  • Генерация Ф112ЭК
  • Генерация Ф103
  • Подготовка и отправка электронной формы Ф103
  • Генерация возвратного ярлыка на одной печатной странице

Архив

  • Запрос данных о партиях
  • Перевод партии в архив
  • Возврат партии из архива

Поиск ОПС

  • По индексу
  • По адресу
  • По координатам
  • Поиск индексов в населённом пункте
  • Почтовые сервисы ОПС
  • Почтовые сервисы ОПС по идентификатору группы сервисов
  • Выгрузка информации об объектах почтовой связи в zip-архиве

Долгосрочное хранение

  • Запрос данных о заказах

401 Unauthorized response

Добрый день. Спасибо за вашу работу. Не знаю куда еще написать. Возможно, ошибка в моей невнимательности.

Появляется такая ошибка. Делаю все в точности как в разделе отправка в пунктах: Конфигурация, Расчёт стоимости пересылки (может, еще что-то необходимо настроить). Только использую свои логин, пароль и токен. Если вывести dd($dispatching->services), ошибки еще нет. А при создании $response = $dispatching->services->calculate(...) появляется ошибка:
ILLEGAL_CREDENTIALS - Ошибка авторизации пользователя: invalid_grant Client error: POST https://otpravka-api.pochta.ru/1.0/tariff resulted in a 401 Unauthorized response
У вас в конфигах логин и пароль называются по-разному: TRACKING и DISPATCHING для трекинга и отправки. Это имеет значение? Я брала из личного кабинета почты. Причем, из личного кабинета - это набор латинских букв, а на странице генерации ключа на сайте почты написано: Имя пользоватателя (емайл). Чей емайл... Токен я уже 10 раз проверила - скопирован из личного кабинета.

Пробовала добавлять в свои данные токена 'AccessToken ', появляется ошибка:
cURL error 18: transfer closed with 103 bytes remaining to read (see https://curl.haxx.se/libcurl/c/libcurl-errors.html),
причем тоже на этапе $response = $dispatching->services->calculate(...). Но вроде бы подпись 'AccessToken ' должна генерироваться со стороны вашего пакета, так что добавление этой подписи должно быть ненужно. Так?

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

Что делаем с ошибками?

Что делаем с ошибками?

У нас есть следующие уровни ошибок

  1. Все виды системных (ОС) ошибок
  2. Ошибки при передаче запрос (http status code != 200 и тп)
  3. Ошибки при парсинге ответа (API выдал null вместо json'а и тп)
  4. Ошибки самого API в ответе ($errors[0]["error-code"] = "ALL_SHIPMENTS_SENT")

Вопрос - когда выбрасывать Exception'ы, а когда просто строки error_code и error_message?

По аналогии с ларой можно реализовывать два метода:

$orders->find('56445645645');
$orders->findOrFail('56445645645');
  1. В первом случае Exception'ы выбрасываются на 1-3 уровни ошибок, а 4й уровень программист анализирует сам
$response = $orders->find('56445645645');
if (is_null($response->body)) //мне важно только найден ли заказ
if (!empty($response->errors)) //мне важно почему не найден заказ
  1. Во втором случае Exception'ы выбрасываются на всех уровнях ошибок
try{
	$response = $orders->findOrFail('56445645645');
}catch(IncorrectOrderIdException $e){
	//Обработка такой ошибки с бизнес-логикой
}catch(APIException $e){
	//Уведомление пользователя об ошибке
}catch(Exception $e){
	//Все совсем плохо, только логгирование
}

При этом IncorrectOrderIdException extends APIException

К моменту когда это дописал - уже не уверен нужно ли реализовывать второй вариант, т.к. это очень много работы сверху. Много кастомных Exception'ов, которые к тому же надо маппить к кодам ошибки из документации.
Но уверен что такой вариант очень полезен в целом ряде задач.

Обсуждаем?

P.S: Судя по всему findOrFail довольно независим, т.е. в качестве компромисса можно сначала реализовать весь API только c find, а только потом думать над findOrFail.

Ваш SDK еще живой?

Все привет, реально ли ваш АПИ использовать в проекте, где надо общаться с АПИ почты России?

findOrderByTrackingNumber возвращает заказ с некорректными данными

Appwilio\RussianPostSDK\Dispatching\Endpoints\Batches\Batches::findOrderByTrackingNumber обращается к /1.0/shipment/search, который возвращает несколько объектов, а не один, за счет чего на выходе имеем Order внутри которого массив заказов.

Корректный вариант:

    /**
     * @param  string  $barcode
     * @return Order[]|null
     */
    public function findOrdersByTrackingNumber(string $barcode)
    {
        return $this->client->get('/1.0/shipment/search', GenericRequest::create(['query' => $barcode]), new ArrayOf(Order::class));
    }

Слабо ориентируюсь в этом API, в моем случае $barcode это был внутренний номер заказа в интернет-магазине, а не трек-номер.

Enum вместо обычных констант

Отправка

Общие

  • Тип адреса (AddressType)
  • Категория партии (BatchCategory)
  • Категория РПО (MailCategory)
  • Вид РПО (MailType)
  • Статус партии (BatchStatus)
  • Способ оплаты (PaymentType)
  • Вид транспортировки (TransportType)
  • Категория уведомления о вручении РПО (NotifyCategory)
  • Код качества нормализации адреса (AddressQuality)
  • Код проверки нормализации адреса (AddressValidity)
  • Код качества нормализации ФИО (FioQuality)
  • Код качества нормализации телефона (PhoneQuality)
  • Тип конверта (EnvelopeType)
  • Разряд письма (MailRank)
  • Тип печати (формат адресного ярлыка) (PrintType)
  • Категория вложения (MailEntryType)
  • Коды видов сервиса ECOM (EcomService)
  • Тип объекта в паспорте ОПС (OpsType)
  • Типоразмер РПО (DimensionType)
  • Способ идентификации получателя ECOM (EcomIdentityMethod)
  • Способ расчета (PaymentMode54FZ)
  • Предмета расчета (PaymentSubject54FZ)
  • Продукты
  • Коды отметок внутренних и международных отправлений
  • Тип операции из трекинга
  • Атрибут операции из трекинга
  • Страны
  • Валюты
  • Статус заявки на вызов курьера
  • Тип пункта выдачи

Валидация

  • Ошибки партий (BatchError)
  • Ошибки удаления из бэклога (RemoveBacklogErrorCode)
  • Ошибки удаления из партии (RemoveFromBatchErrorCode)
  • Ошибки валидации заказа (OrderValidationError)
  • Ошибки тарификации (TariffErrorCode)

Трекинг

Как будем получать свойства объектов

Как будем получать свойства объектов?

Почти все свойства в API содержат тире в названии

"location-to": "string",
"mail-category": "SIMPLE",
"mail-type": "UNDEFINED",
"manual-address-input": true

Поскольку мы не можем сделать $order->mail-category, то варианты такие:

//либо маппить названия к варианту с подчеркиванием
["mail-category"=>"mail_category"]
$order->mail_category

//либо реализовать доступ так
$order["mail-category"]

//либо не париться совсем
$order->{'mail-category'}

У кого какие пристрастия?

Отправка с разных адресов

Добрый день! Возможна ли в данном пакете реализация отправки с разных адресов? Как в случае маркетплейса

И еще: при работе с пакетом у меня возникла ошибка - "неверное имя или пароль, про1дите регистрацию на сайте почты России". Но при этом имя и пароль верные

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.