Dziś odniosę się do
drugiej strategii, a mianowicie do używania buforów tworzonych
przez użytkownika.
Jest bardziej optymalna,
daje możliwość bezkonfiliktowego użytkowania jednocześnie kilku
niezależnych buforów i powinna być stosowana jako jedyna sensowna,
a jej stosowanie nie uniemożliwi nam w przyszłości rozbudwania
funkcjonalności apolikacji.
Całą
procedurę wysyłania przesyłek opisać można w 7 krokach.
1. ustalenie dostępnych
numerów kart (getKarty)
2. ustawienie bieżącej
karty (setAktywnaKarta)
3.
utworzenie nowego bufora (createEnvelopeBufor)
4.
utworzenie przesyłki
5. wysłanie przesyłki do
elektronicznego nadawcy do zdefiniowanego bufora (addShipmnet)
6. pobranie dostępnych
urzędów nadania dla bieżącej karty (getUrzedyNadania)
7. wysłanie informacji o
utworzonych przesyłkach w wybranym buforze na określony urząd
nadania (sendEnvelope)
W wywołaniu
createEnvelopeBufor nie trzeba podawać urzędu nadania, tylko datę
nadania i najlepiej opis, aby móc łatwo zidentyfikować zbiór na
stronie Elektronicznego Nadawcy, w folderze Przygotowanych. Urząd
nadania jest wymagany zawsze w metodzie sendEnvelope.
Metoda createEnvelopeBufor,
jeśli nie zwróci nam błędów, wówczas zwróci nam pole bufor,
którego pole idBufor będzie nam potrzebny do identyfikacji bufora,
przy dodawaniu przesyłek oraz przy wysyłaniu przesyłek na urząd.
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <?php include "ElektronicznyNadawca.php"; class client { protected $guid = null; public $urzedyNadania = null; protected $karty = null; protected $przesylki = array(); protected $przesylkiDodane = array(); protected $login = 'użytkownik w systemie Elektroniczny Nadawca'; protected $location = 'https://en-testwebapi.poczta-polska.pl/websrv/labs.php'; protected $password = 'hasło'; protected $en = null; // ------------------------------------------------------------------------- public function __construct() { $this->en = new ElektronicznyNadawca("labs.wsdl", array( 'login' => $this->login, 'password' => $this->password, 'location' => $this->location )); } // ------------------------------------------------------------------------- public function testGetKarty() { echo "========testGetKarty==================== "; $parameters = new getKarty(); $response = $this->en->getKarty($parameters); var_dump($response); $response->karta = $this->convertToArray($response->karta); $this->karty = $response->karta; } // ------------------------------------------------------------------------- public function testSetAktywnaKarta() { echo "========setAktywnaKarta==================== "; $parameters = new setAktywnaKarta(); $parameters->idKarta = reset($this->karty)->idKarta; $response = $this->en->setAktywnaKarta($parameters); var_dump($parameters); $response = new setAktywnaKartaResponse(); if(!is_null($response->error)) { $this->printErrors($response->error); throw new Exception("Błąd ustawiania karty."); } } // ------------------------------------------------------------------------- public function testCreateEnvelopeBufor() { echo "========testCreateEnvelopeBufor==================== "; $parameters = new createEnvelopeBufor(); $parameters->bufor = new buforType(); $date = new DateTime(Date("Y-m-d")); $date->add(new DateInterval('P3D')); $parameters->bufor->dataNadania = $date->format('Y-m-d'); $parameters->bufor->opis = "Moj nowy bufor z datą " . $parameters->bufor->dataNadania; $response = $this->en->createEnvelopeBufor($parameters); var_dump($response); $response = new createEnvelopeBuforResponse(); $response->createdBufor = new buforType(); if(!is_null($response->error)) { $this->printErrors($response->error); throw new Exception("Błąd towrzenia bufora."); } return $response->createdBufor; } // ------------------------------------------------------------------------- public function testPaczkaPocztowaType() { echo "========testPaczkaPocztowaType==================== "; $paczka = new paczkaPocztowaType(); $paczka->adres = new adresType(); $paczka->adres->nazwa = "Jan Kowalski"; $paczka->adres->ulica = "Kowalska"; $paczka->adres->numerDomu = "666"; $paczka->adres->numerLokalu = "666"; $paczka->adres->kodPocztowy = "66-666"; $paczka->adres->miejscowosc = "Warszawa"; $paczka->kategoria = kategoriaType::PRIORYTETOWA; $paczka->gabaryt = gabarytType::GABARYT_B; $paczka->wartosc = 20000; $paczka->guid = $this->getGuid(); var_dump($paczka); $this->przesylki[] = $paczka; } // ------------------------------------------------------------------------- public function testAddShipment(buforType $bufor) { echo "========testAddShipment==================== "; $parameters = new addShipment(); $parameters->idBufor = $bufor->idBufor; $parameters->przesylki = $this->przesylki; $response = $this->en->addShipment($parameters); var_dump($response); $response->retval = $this->convertToArray($response->retval); foreach($response->retval as $przesylka) { if(is_null($przesylka->error)) $this->przesylkiDodane[] = $przesylka; else { echo "Nie udało się dodać przesyłki " . $przesylka->guid . " z powodu błędów. "; $this->printErrors($przesylka->error); } } } // ------------------------------------------------------------------------- public function testSendEnvelope(buforType $bufor) { echo "========testSendEnvelope==================== "; $parameters = new sendEnvelope(); $parameters->urzadNadania = reset($this->urzedyNadania)->urzadNadania; $parameters->idBufor = $bufor->idBufor; $response = $this->en->sendEnvelope($parameters); var_dump($response); if(!is_null($response->error)) { $this->printErrors($response->error); throw new Exception("Błąd wysyłania zbioru"); } else { echo "Status wysłanego kontenera przesyłek: " . $response->envelopeStatus . " "; echo "Identyfikator kontenera przesyłek: " . $response->idEnvelope . " "; return $response->idEnvelope; } } // ------------------------------------------------------------------------- public function testGetUrzadNadania() { echo "========testGetUrzadNadania==================== "; $response = $this->en->getUrzedyNadania(new getUrzedyNadania()); var_dump($response->urzedyNadania); $response->urzedyNadania = $this->convertToArray($response->urzedyNadania); if(count($response->urzedyNadania) == 0) throw new Exception("Brak urzędów nadania."); $this->urzedyNadania = $response->urzedyNadania; } // ------------------------------------------------------------------------- function getGuid() { mt_srand((double)microtime() * 10000); $charid = strtoupper(md5(uniqid(rand(), true))); $retval = substr($charid, 0, 32); return $retval; } // ------------------------------------------------------------------------- function convertToArray($data) { if(!is_array($data)) $data = array( $data ); return $data; } // ------------------------------------------------------------------------- function printErrors($errors) { $errors = $this->convertToArray($errors); foreach($errors as $error) { echo "[" . $error->errorNumber . "] " . $error->errorDesc . " " . $error->guid . " "; } } } $c = new client(); $c->testGetKarty(); $c->testSetAktywnaKarta(); $bufor = $c->testCreateEnvelopeBufor(); $c->testPaczkaPocztowaType(); $c->testAddShipment($bufor); $c->testGetUrzadNadania(); $c->testSendEnvelope($bufor); ?> </body> </html>