147 lines
5.0 KiB
PHP
147 lines
5.0 KiB
PHP
<?php
|
|
|
|
require_once __DIR__ . '/../Exception/ClientException.php';
|
|
|
|
/**
|
|
* Klasa odpowiedzialna za łacznie się z web api PP
|
|
*/
|
|
class Client extends SoapClient {
|
|
|
|
/**
|
|
* Mapa klas typów przesyłek
|
|
* @var type
|
|
*/
|
|
public static $classmap = array(
|
|
'przesylkaType' => 'przesylkaType',
|
|
'paczkaPocztowaType' => 'paczkaPocztowaType',
|
|
'przesylkaBiznesowaType' => 'przesylkaBiznesowaType',
|
|
'uslugaKurierskaType' => 'uslugaKurierskaType',
|
|
'globalExpresType' => 'globalExpresType',
|
|
'przesylkaPoleconaZagranicznaType' => 'przesylkaPoleconaZagranicznaType',
|
|
'przesylkaFirmowaPoleconaType' => 'przesylkaFirmowaPoleconaType',
|
|
'paczkaZagranicznaType' => 'paczkaZagranicznaType',
|
|
'EMSType' => 'EMSType',
|
|
'paczkaPocztowaPLUSType' => 'paczkaPocztowaPLUSType',
|
|
'przesylkaPobraniowaType' => 'przesylkaPobraniowaType',
|
|
'przesylkaNaWarunkachSzczegolnychType' => 'przesylkaNaWarunkachSzczegolnychType',
|
|
'przesylkaPoleconaKrajowaType' => 'przesylkaPoleconaKrajowaType',
|
|
'przesylkaHandlowaType' => 'przesylkaHandlowaType',
|
|
'przesylkaListowaZadeklarowanaWartoscType' => 'przesylkaListowaZadeklarowanaWartoscType',
|
|
'przesylkaFullType' => 'przesylkaFullType',
|
|
'przesylkaRejestrowanaType' => 'przesylkaRejestrowanaType',
|
|
'subUslugaKurierskaType' => 'subUslugaKurierskaType',
|
|
'subPrzesylkaBiznesowaType' =>'subPrzesylkaBiznesowaType',
|
|
|
|
'kartaType' => 'kartaType',
|
|
'rodzajListType' => 'rodzajListType',
|
|
'pocztex2021KurierType' => 'pocztex2021KurierType',
|
|
'subPocztex2021KurierType' => 'subPocztex2021KurierType',
|
|
'pocztex2021NaDzisType' => 'pocztex2021NaDzisType',
|
|
'subPocztex2021NaDzisType' => 'subPocztex2021NaDzisType',
|
|
'potwierdzenieEDoreczeniaType' => 'potwierdzenieEDoreczeniaType',
|
|
'placowkaPocztowaType' => 'placowkaPocztowaType',
|
|
);
|
|
|
|
/**
|
|
* Obiekt loggera
|
|
* @var type
|
|
*/
|
|
private $_logger = null;
|
|
|
|
/**
|
|
* Konstruktor
|
|
* @param type $url
|
|
* @param type $login
|
|
* @param type $password
|
|
* @param type $debug
|
|
* @param type $options
|
|
*/
|
|
public function __construct($url, $login, $password, $location, $debug = false, $options = array()) {
|
|
$this->url = $url;
|
|
$this->debug = $debug;
|
|
$options['login'] = $login;
|
|
$options['password'] = $password;
|
|
$options['uri'] = $url;
|
|
$options['location'] = $location;
|
|
$options['cache_wsdl'] = WSDL_CACHE_NONE;
|
|
$this->_logger = new ENadawcaLogger();
|
|
foreach (self::$classmap as $key => $value) {
|
|
if (!isset($options['classmap'][$key])) {
|
|
$options['classmap'][$key] = $value;
|
|
}
|
|
}
|
|
parent::__construct($url, $options);
|
|
}
|
|
|
|
private function _normalizeResponse($data) {
|
|
if (is_object($data)) {
|
|
$data = get_object_vars($data);
|
|
}
|
|
if (is_array($data)) {
|
|
foreach ($data as &$v) {
|
|
$v = $this->_normalizeResponse($v);
|
|
}
|
|
return $data;
|
|
} else {
|
|
return $data;
|
|
}
|
|
}
|
|
|
|
private function _checkErrors($data) {
|
|
if (isset($data['error'])&&is_array($data['error'])) {
|
|
if (!isset($data['error']['errorNumber'])) {
|
|
$errors = array();
|
|
foreach ($data['error'] as $v) {
|
|
$errors[] = $v['errorDesc'];
|
|
}
|
|
return implode("\n", $errors);
|
|
} else {
|
|
return $data['error']['errorDesc'];
|
|
}
|
|
} else {
|
|
if (is_array($data)) {
|
|
$errors = array();
|
|
foreach ($data as $d) {
|
|
$error = $this->_checkErrors($d);
|
|
if (!empty($error)) {
|
|
$errors[] = $error;
|
|
}
|
|
}
|
|
return implode("\n", $errors);
|
|
}
|
|
}
|
|
return '';
|
|
}
|
|
|
|
/**
|
|
* Metodą odpowiedzialna za wywołanie funkcji z api
|
|
* @param type $function_name
|
|
* @param type $parameters
|
|
* @param array $options
|
|
* @return type
|
|
*/
|
|
public function call($function_name, $parameters = array(), array $options = null) {
|
|
$response = false;
|
|
try {
|
|
$options['uri'] = $this->url;
|
|
if($this->debug){
|
|
$this->_logger->log("Call webserwice function " . $function_name, array('parameters' => $parameters, 'options' => $options));
|
|
}
|
|
|
|
$response = $this->_normalizeResponse($this->__soapCall($function_name, array($parameters), $options));
|
|
$errors = $this->_checkErrors($response);
|
|
if (!empty($errors)) {
|
|
throw new ENadawcaException($errors);
|
|
}
|
|
if($this->debug){
|
|
$this->_logger->log("Result webserwice function " . $function_name, $response);
|
|
}
|
|
|
|
} catch (SoapFault $e) {
|
|
throw new ClientException($e);
|
|
}
|
|
return $response;
|
|
}
|
|
|
|
}
|