Dokumentation in ukrainischer Sprache verfügbar [gegen Entgelt](https://github.com/lis-dev/nova-poshta-api-2/blob/master/README.ua.md)

[![Build Status](https://travis-ci.com/lis-dev/nova-poshta-api-2.svg?branch=master)](https://travis-ci.com/lis-dev/nova-poshta-api-2)

# Nova Poshta API 2.0
Die Klasse ermöglicht den Zugriff auf die Funktionen der Nova Posta Zustelldienst API 2.0

# Vorbereitung
## Beziehen eines API-Schlüssels
Um API nutzen zu können, müssen Sie: 
* Registrierung auf [Nova Post Website] (http://novaposhta.ua)
* Auf der [Einstellungsseite] (https://my.novaposhta.ua/settings/index#apikeys) im persönlichen Kabinett einen Schlüssel für die Arbeit mit der API erstellen  

Sobald der API-Schlüssel erhalten wurde, können alle Methoden der Klasse [offiziell aus der Dokumentation] verwendet werden(https://my.novaposhta.ua/data/API2-200215-1622-28.pdf)

## Installation der neuesten Version der Klasse für die Arbeit mit der API
### Git
Ausführen in der Befehlszeile
```git
git clone https://github.com/lis-dev/nova-poshta-api-2
```
### Composer
Erstellen Sie eine Datei ``composer.json`` mit folgendem Inhalt    
```json
{
    "require": {
        "lis-dev/nova-poshta-api-2": "~0.1.0"
    }
}
```
und führen Sie den Kommandozeilenbefehl ``php composer.phar install'' oder ``php composer.phar update'' aus
Oder führen Sie in der Befehlszeile aus 
```
composer require lis-dev/nova-poshta-api-2
```
### Alternativer Einbau
Laden Sie das Archiv unter folgendem Link herunter
```
https://github.com/lis-dev/nova-poshta-api-2/archive/master.zip
```
# Datenformate
PHP-Arrays für eingehende Daten verwendet werden, kann die Server-Antwort in dem Format empfangen werden
* als PHP-Array
* JSON
* XML

## Mit 
## Verbinden einer Klasse bei der Installation über Composer
```php
require __DIR__ . '/vendor/autoload.php';
```

## Verbinden einer Klasse in einer alternativen Installation
```php
require '<path_to_dir>/src/Delivery/NovaPoshtaApi2.php';
```

## Erstellen einer Instanz der Klasse
Die Standardklasse befindet sich im Namespace `LisDev\Delivery`. Wenn Sie eine Instanz der Klasse erstellen, müssen Sie
oder verwenden Sie Full Qualified Class Name:
```php
$np = new \LisDev\Delivery\NovaPoshtaApi2('Ihr_Schlüssel_API_2.0');
```
oder geben Sie den zu verwendenden Namespace im Abschnitt use an:
```php
use LisDev\Delivery\NovaPoshtaApi2;
...
$np = new NovaPoshtaApi2('Ihr_Schlüssel_API_2.0');
```

Weitere Informationen zur Arbeit mit Namespaces finden Sie [auf der php-Dokumentationsseite](https://www.php.net/manual/ru/language.namespaces.rationale.php)

## Erstellen einer Klasseninstanz (mit erweiterten Parametern)
Empfohlen, wenn es notwendig ist, Daten in einer anderen Sprache als Russisch abzurufen, bei einem Anfragefehler eine Exception auszulösen, oder wenn auf dem Server keine curl-Bibliothek installiert ist
```php
$np = new NovaPoshtaApi2(
	'Ihr_Schlüssel_API_2.0',
	'ru', // Die Sprache der zurückgegebenen Daten: ru (default) | ua | en
	FALSE, // Im Falle eines Fehlers in der Abfrage, verwerfen Exception: FALSE (default) | TRUE
	'curl' // Zu verwendender Abfragemechanismus: curl (defalut) | file_get_content
);
```

## Abrufen von Tracknummerninformationen
```php
$result = $np->documentsTracking('59000000000000');
```

## Einen Liefertermin erhalten
```php
// // Abrufen des Stadtcodes nach Stadt und Region
$sender_city = $np->getCity('Belgorod-Dnistrovsky', 'Odessa');
$sender_city_ref = $sender_city['data'][0]['Ref'];
// // Abrufen des Stadtcodes nach Stadt und Region
$recipient_city = $np->getCity('Kiew', 'Kiewska');
$recipient_city_ref = $recipient_city['data'][0]['Ref'];
// Datum der Versendung
$date = date('d.m.Y');
// Abrufen eines geschätzten Ankunftsdatums für eine Sendung zwischen Lagern in verschiedenen Städten
$result = $np->getDocumentDeliveryDate($sender_city_ref, $recipient_city_ref, 'WarehouseWarehouse', $date);	
```
## Empfangsgebühren für Lieferungen
```php
// // Abrufen des Stadtcodes nach Stadt und Region
$sender_city = $np->getCity('Belgorod-Dnistrovsky', 'Odessa');
$sender_city_ref = $sender_city['data'][0]['Ref'];
// // Abrufen des Stadtcodes nach Stadt und Region
$recipient_city = $np->getCity('Kiew', 'Kiewska');
$recipient_city_ref = $recipient_city['data'][0]['Ref'];
// Gewicht der Waren
$weight = 7;
// Preis in UAH
$price = 5450;
// Ermittlung der Versandkosten für eine Sendung mit einem bestimmten Gewicht und Wert zwischen Lagern in verschiedenen Städten 
$result = $np->getDocumentPrice($sender_city_ref, $recipient_city_ref, 'WarehouseWarehouse', $weight, $price);
```
## Erzeugen eines neuen elektronischen Frachtbriefs
```php
// Empfang von Absenderdaten vor der Erzeugung des EN
// Empfang aller Absender
$senderInfo = $np->getCounterparties('Sender', 1, '', '');
// Auswahl eines Absenders in einer bestimmten Stadt (in diesem Fall der erste, den Sie finden)
$sender = $senderInfo['data'][0];
// Informationen über das Lager des Absenders
$senderWarehouses = $np->getWarehouses($sender['City']);
// Erzeugen eines neuen Frachtbriefs
$result = $np->newInternetDocument(
    // Angaben zum Absender
    array(
        // Benutzerdaten
        'FirstName' => $sender['FirstName'],
        'MiddleName' => $sender['MiddleName'],
        'LastName' => $sender['LastName'],
        // Anstelle von FirstName, MiddleName, LastName können Sie den registrierten Namen des Absenders oder den Firmennamen für juristische Personen eingeben
        // (kann durch Aufruf von getCounterparties('Sender', 1, '', '') ermittelt werden)
        // 'Beschreibung' => $sender['Beschreibung'],
        // Optionales Feld; ansonsten wird es aus den Daten des Kontakts verwendet
        // "Telefon" => "0631112233",
        // Stadt der Abfahrt
        // "Stadt" => "Belgorod-Dnistrovsky",
        // Region des Abgangs
        // 'Region' => 'Odessa',
        'CitySender' => $sender['City'],
        // Postamt nach ID (in diesem Fall das erste, das Sie sehen)
        'SenderAddress' => $senderWarehouses['data'][0]['Ref'],
        // Zweigstelle der Sendung bei
        // 'Warehouse' => $senderWarehouses['data'][0]['DescriptionRu'],
    ),
    // Angaben zum Empfänger
    array(
        'FirstName' => 'Сидор',
        'MiddleName' => 'Сидорович',
        'LastName' => 'Сиродов',
        'Phone' => '0509998877',
        'City' => 'Kiew',
        'Region' => 'Kiewska',
        'Warehouse' => 'Zweigstelle Nr. 3: Kalachevska Straße 13 (Staraya Darnitsa)',
    ),
    array(
        // Datum der Abreise
        'DateTime' => date('d.m.Y'),
        // Art der Lieferung, optional - getServiceTypes()
        'ServiceType' => 'WarehouseWarehouse',
        // Art der Zahlung, fakultativ - getPaymentForms()
        'PaymentMethod' => 'Cash',
        // Wer zahlt die Lieferung
        'PayerType' => 'Recipient',
        // Kosten der Waren in UAH
        'Cost' => '500',
        // Anzahl der Sitze
        'SeatsAmount' => '1',
        // Beschreibung der Ladung
        'Description' => 'Topf',
        // Art der Lieferung, optional - getCargoTypes
        'CargoType' => 'Cargo',
        // Gewicht der Last
        'Weight' => '10',
        // Ladevolumen in Kubikmetern.
        'VolumeGeneral' => '0.5',
        // Rücksendung
        'BackwardDeliveryData' => array(
            array(
                // Wer bezahlt die Rücksendung?
                'PayerType' => 'Recipient',
                // Art der Lieferung
                'CargoType' => 'Money',
                // Der Wert der umgekehrten Zustellung
                'RedeliveryString' => 4552,
            )
        )
    )
);
```
## Abrufen von Geschäften in einer bestimmten Stadt
```php
// Parameter umfassen Stadt und Region (für eine genauere Suche)
$city = $np->getCity('Kiew', 'Kiewska');
$result = $np->getWarehouses($city['data'][0]['Ref']);
```
## Aufrufen einer beliebigen Methode
```php
$result = $np
	->model('Modell_name')
	->method('Methode_name')
	->params(array(
		'Parameter_Name_1' => 'Parameter_Wert_1',
		'Parameter_Name_2' => 'Parameter_Wert_2',
	))
	->execute();
```

## Implementierte Methoden für die Arbeit mit Modellen

## Modell InternetDocument
* save
* update
* delete
* getDocumentPrice
* getDocumentDeliveryDate
* getDocumentList
* getDocument
* printDocument
* printMarkings
* documentsTracking
* newInternetDocument
* generateReport

## Modell Counterparty
* save
* update
* delete
* cloneLoyaltyCounterpartySender
* getCounterparties
* getCounterpartyAddresses
* getCounterpartyContactPersons
* getCounterpartyByEDRPOU
* getCounterpartyOptions

## Modell ContactPerson
* save
* update
* delete

## Modell Address
* save
* update
* delete
* getCities
* getStreet
* getWarehouses
* getAreas
* findNearestWarehouse

## Modell Common
* getTypesOfCounterparties
* getBackwardDeliveryCargoTypes
* getCargoDescriptionList
* getCargoTypes
* getDocumentStatuses
* getOwnershipFormsList
* getPalletsList
* getPaymentForms
* getTimeIntervals
* getServiceTypes
* getTiresWheelsList
* getTraysList
* getTypesOfPayers
* getTypesOfPayersForRedelivery

# Tests
Aktuelle Tests und Beispiele für die Verwendung der Klasse finden Sie in der Datei `tests/NovaPoshtaApi2Test.php`

Um die Tests lokal auszuführen, führen Sie auf der Kommandozeile aus
```
Composer-Installation
NOVA_POSHTA_API2_KEY=Ihr_Schlüssel_API_2.0 vendor/phpunit/phpunit/phpunit tests
```
