wtorek, 11 listopada 2014

Bufory użytkownika

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.


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 = '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>

Brak komentarzy:

Prześlij komentarz