lis-dev/nova-poshta-api-2

用于乌克兰快递公司 "Nova Poshta" API 2.0 的 PHP 类

0.1.6 2020-12-09 13:43 UTC

README

乌克兰语文档可通过以下链接获取 链接

Build Status

Nova Poshta API 2.0

该类提供对 Nova Poshta 2.0 API 功能的访问

准备

获取 API 密钥

使用 API 需要

获取 API 密钥后,可以开始使用所有类的官方文档中提供的方法 链接

安装用于与 API 一起工作的类的最新版本

Git

需要在命令行中执行

git clone https://github.com/lis-dev/nova-poshta-api-2

Composer

需要创建包含以下内容的 composer.json 文件

{
    "require": {
        "lis-dev/nova-poshta-api-2": "~0.1.0"
    }
}

并在命令行中运行 php composer.phar installphp composer.phar update。或者,在命令行中执行

composer require lis-dev/nova-poshta-api-2

替代安装

需要通过链接下载存档

https://github.com/lis-dev/nova-poshta-api-2/archive/master.zip

数据格式

输入数据使用 PHP 数组,服务器响应可以是以下格式之一

  • PHP 数组
  • JSON
  • XML

使用

通过 Composer 安装时连接类

require __DIR__ . '/vendor/autoload.php';

通过替代安装连接类

require '<path_to_dir>/src/Delivery/NovaPoshtaApi2.php';

创建类实例

类默认位于 namespace \LisDev\Delivery。在创建类实例时,需要使用全限定类名或指定使用的 namespace

$np = new \LisDev\Delivery\NovaPoshtaApi2('Ваш_ключ_API_2.0');

或在使用 use 部分中指定

use LisDev\Delivery\NovaPoshtaApi2;
...
$np = new NovaPoshtaApi2('Ваш_ключ_API_2.0');

有关使用 namespace 的更多信息,请参阅 php 文档网站

创建具有扩展参数的类实例

如果需要用不同于俄语的语言获取数据,或者请求失败时抛出异常,或者服务器上未安装 curl 库,则推荐使用

$np = new NovaPoshtaApi2(
	'Ваш_ключ_API_2.0',
	'ru', // Язык возвращаемых данных: ru (default) | ua | en
	FALSE, // При ошибке в запросе выбрасывать Exception: FALSE (default) | TRUE
	'curl' // Используемый механизм запроса: curl (defalut) | file_get_content
);

获取跟踪号信息

$result = $np->documentsTracking('59000000000000');

获取运输期限

// Получение кода города по названию города и области
$sender_city = $np->getCity('Белгород-Днестровский', 'Одесская');
$sender_city_ref = $sender_city['data'][0]['Ref'];
// Получение кода города по названию города и области
$recipient_city = $np->getCity('Киев', 'Киевская');
$recipient_city_ref = $recipient_city['data'][0]['Ref'];
// Дата отправки груза
$date = date('d.m.Y');
// Получение ориентировочной даты прибытия груза между складами в разных городах
$result = $np->getDocumentDeliveryDate($sender_city_ref, $recipient_city_ref, 'WarehouseWarehouse', $date);	

获取运输成本

// Получение кода города по названию города и области
$sender_city = $np->getCity('Белгород-Днестровский', 'Одесская');
$sender_city_ref = $sender_city['data'][0]['Ref'];
// Получение кода города по названию города и области
$recipient_city = $np->getCity('Киев', 'Киевская');
$recipient_city_ref = $recipient_city['data'][0]['Ref'];
// Вес товара
$weight = 7;
// Цена в грн
$price = 5450;
// Получение стоимости доставки груза с указанным весом и стоимостью между складами в разных городах 
$result = $np->getDocumentPrice($sender_city_ref, $recipient_city_ref, 'WarehouseWarehouse', $weight, $price);

生成新的电子运单

// Перед генерированием ЭН необходимо получить данные отправителя
// Получение всех отправителей
$senderInfo = $np->getCounterparties('Sender', 1, '', '');
// Выбор отправителя в конкретном городе (в данном случае - в первом попавшемся)
$sender = $senderInfo['data'][0];
// Информация о складе отправителя
$senderWarehouses = $np->getWarehouses($sender['City']);
// Генерирование новой накладной
$result = $np->newInternetDocument(
    // Данные отправителя
    array(
        // Данные пользователя
        'FirstName' => $sender['FirstName'],
        'MiddleName' => $sender['MiddleName'],
        'LastName' => $sender['LastName'],
        // Вместо FirstName, MiddleName, LastName можно ввести зарегистрированные ФИО отправителя или название фирмы для юрлиц
        // (можно получить, вызвав метод getCounterparties('Sender', 1, '', ''))
        // 'Description' => $sender['Description'],
        // Необязательное поле, в случае отсутствия будет использоваться из данных контакта
        // 'Phone' => '0631112233',
        // Город отправления
        // 'City' => 'Белгород-Днестровский',
        // Область отправления
        // 'Region' => 'Одесская',
        'CitySender' => $sender['City'],
        // Отделение отправления по ID (в данном случае - в первом попавшемся)
        'SenderAddress' => $senderWarehouses['data'][0]['Ref'],
        // Отделение отправления по адресу
        // 'Warehouse' => $senderWarehouses['data'][0]['DescriptionRu'],
    ),
    // Данные получателя
    array(
        'FirstName' => 'Сидор',
        'MiddleName' => 'Сидорович',
        'LastName' => 'Сиродов',
        'Phone' => '0509998877',
        'City' => 'Киев',
        'Region' => 'Киевская',
        'Warehouse' => 'Отделение №3: ул. Калачевская, 13 (Старая Дарница)',
    ),
    array(
        // Дата отправления
        'DateTime' => date('d.m.Y'),
        // Тип доставки, дополнительно - getServiceTypes()
        'ServiceType' => 'WarehouseWarehouse',
        // Тип оплаты, дополнительно - getPaymentForms()
        'PaymentMethod' => 'Cash',
        // Кто оплачивает за доставку
        'PayerType' => 'Recipient',
        // Стоимость груза в грн
        'Cost' => '500',
        // Кол-во мест
        'SeatsAmount' => '1',
        // Описание груза
        'Description' => 'Кастрюля',
        // Тип доставки, дополнительно - getCargoTypes
        'CargoType' => 'Cargo',
        // Вес груза
        'Weight' => '10',
        // Объем груза в куб.м.
        'VolumeGeneral' => '0.5',
        // Обратная доставка
        'BackwardDeliveryData' => array(
            array(
                // Кто оплачивает обратную доставку
                'PayerType' => 'Recipient',
                // Тип доставки
                'CargoType' => 'Money',
                // Значение обратной доставки
                'RedeliveryString' => 4552,
            )
        )
    )
);

获取特定城市的仓库

// В параметрах указывается город и область (для более точного поиска)
$city = $np->getCity('Киев', 'Киевская');
$result = $np->getWarehouses($city['data'][0]['Ref']);

调用任意方法

$result = $np
	->model('Имя_модели')
	->method('Имя_метода')
	->params(array(
		'Имя_параметра_1' => 'Значение_параметра_1',
		'Имя_параметра_2' => 'Значение_параметра_2',
	))
	->execute();

实现用于处理模型的函数

InternetDocument 模型

  • 保存
  • 更新
  • 删除
  • 获取文档价格
  • 获取文档交付日期
  • 获取文档列表
  • 获取文档
  • 打印文档
  • 打印标记
  • 跟踪文档
  • 创建新的 InternetDocument
  • 生成报告

Counterparty 模型

  • 保存
  • 更新
  • 删除
  • 克隆忠诚度发送方 Counterparty
  • 获取 Counterparties
  • 获取 Counterparty 地址
  • 获取 Counterparty 联系人
  • 通过 EDRPOU 获取 Counterparty
  • 获取 Counterparty 选项

ContactPerson 模型

  • 保存
  • 更新
  • 删除

Address 模型

  • 保存
  • 更新
  • 删除
  • 获取城市
  • 获取街道
  • 获取仓库
  • 获取区域
  • 查找最近的仓库

Common 模型

  • 获取 Counterparty 类型
  • 获取向后运输货物类型
  • 获取货物描述列表
  • 获取货物类型
  • 获取文档状态
  • 获取所有权形式列表
  • 获取托盘列表
  • 获取付款方式
  • 获取时间间隔
  • 获取服务类型
  • 获取轮胎和轮毂列表
  • 获取托盘列表
  • 获取付款人类型
  • 获取重新配送付款人类型

测试

当前测试用例和类使用示例位于文件 tests/NovaPoshtaApi2Test.php

要本地运行测试,需要在命令行中执行

composer install
NOVA_POSHTA_API2_KEY=Ваш_ключ_API_2.0 vendor/phpunit/phpunit/phpunit tests