Gdy
mamy już gotowego prostego klienta, czas wrzucić jakąś przesyłkę.
Ale
na początek może wytłumaczę czym jest karta, którą definiuje
się jako dodatnią liczbę całkowitą. Najprościej wyobrazić
sobie ją jako kontener, który umożliwia wkładanie do niego tylko
przesyłek, które są do niego przypisane. Tak więc jeśli mamy
umowę z Pocztą i dostajemy od nich jakieś numery kart, to każda z
tych kart definiuje co w jej ramach można wysyłać.
Przed
wysłaniem przesyłki potrzebny jest nam bufor, do którego będziemy
mogli ją wrzucić. Oczywiście system pozwala nam się czymś takim
nie przejmować, będziemy wówczas musieli korzystać z bufora
domyślnego, dlatego przedstawię tu dwie strategie:
1. korzystanie z
bufora domyślnego
2. korzystanie, z
świadomie tworzonych przez użytkownika buforów
Dziś zajmę się
punktem pierwszym: korzystanie z bufora domyślnego
Użytkowanie
bufora domyślnego ma swoje ograniczenie, dzień w którym coś do
niego wrzucamy musi być dniem jego wysłania a jednocześnie jest
dniem nadania. Dodatkowo, najbezpieczniej przed wrzuceniem do niego
nowych przesyłek wyczyścić go całkowicie (metoda clearEnvelope)
tak aby mieć pewność, że nie ma tam przesyłek, których
zapomnieliśmy wysłać dzień wcześniej.
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.
wyczyszczenie istniejącego bufora (clearEnvelope)
4.
utworzenie przesyłki
5.
wysłanie przesyłki do elektronicznego nadawcy (addShipmnet)
6.
pobranie dostępnych urzędów nadania dla bieżącej karty
(getUrzedyNadania)
7.
wysłanie informacji o utworzonych przesyłkach na wybrany urząd
nadania (sendEnvelope)
Pominąłem
na tą chwilę pobieranie nalepek adresowych aby nie zaciemniać
kodu, nalepki adresowe można pobrać po utworzeniu przesyłek jaki i
po ich wysłaniu na wybrany urząd nadania. Dodatkowo uprościłem sprawę wybierania karty oraz urzędu nadania, po przez użycie zawsze pierwszej z dostępnych.
Poniżej
wrzucam, mam nadzieję czytelny kod, który wykona wszystkie
czynności od 1 do 7. Najlepiej go odpalić i sprawdzić jak działa, oraz dla pewności co pozostaje po jego wykonaniu w folderze "Wysłane" na stronie
Testowej Elektronicznego Nadawcy.
Plik do pobrania
<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 = 'nazwa użytkownika 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 "========<b>testGetKarty</b>====================<BR>";
$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 "========<b>setAktywnaKarta</b>====================<BR>";
$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 testClearEnvelope()
{
echo "========<b>testClearEnvelope</b>====================<BR>";
$response = $this->en->clearEnvelope(new clearEnvelope());
var_dump($response);
}
// -------------------------------------------------------------------------
public function testPaczkaPocztowaType()
{
echo "========<b>testPaczkaPocztowaType</b>====================<BR>";
$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()
{
echo "========<b>testAddShipment</b>====================<BR>";
$parameters = new addShipment();
$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 "<B>Nie udało się dodać przesyłki </B>" . $przesylka->guid . " z powodu błędów.<BR>";
$this->printErrors($przsylka->error);
}
}
}
// -------------------------------------------------------------------------
public function testSendEnvelope()
{
echo "========<b>testSendEnvelope</b>====================<BR>";
$parameters = new sendEnvelope();
$parameters->urzadNadania = $this->urzedyNadania[0]->urzadNadania;
$response = $this->en->sendEnvelope($parameters);
var_dump($response);
if(!is_null($response->error))
{
$this->printErrors($response->error);
}
echo "<B>Status wysłanego kontenera przesyłek: </B>" . $response->envelopeStatus . "<BR>";
echo "<B>Identyfikator kontenera przesyłek: </B>" . $response->idEnvelope . "<BR>";
return $response->idEnvelope;
}
// -------------------------------------------------------------------------
public function testGetUrzadNadania()
{
echo "========<b>testGetUrzadNadania</b>====================<BR>";
$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 . "<BR>";
}
}
}
$c = new client();
$c->testGetKarty();
$c->testSetAktywnaKarta();
$c->testClearEnvelope();
$c->testPaczkaPocztowaType();
$c->testAddShipment();
$c->testGetUrzadNadania();
$c->testSendEnvelope();
?>
</body>
</html>