35 define(
'DEBUG',
false);
40 require_once
'WSSSoapClient.php';
44 require_once (
'WSCMIME/WSCMime.php');
78 const KEYCLIENTE_AUTENTICA =
'autentica';
79 const KEYCLIENTE_AUTORIZA =
'autoriza';
80 const KEYCLIENTE_FIRMA =
'firma';
81 const KEYCLIENTE_GDE =
'gde';
82 const KEYCLIENTE_SALT =
'salt';
83 const KEYCLIENTE_CSV =
'csv';
84 const KEYCLIENTE_CATASTRO =
'catastro';
85 const KEYCLIENTE_CATASTRO_BIENES =
'catbienes';
86 const KEYCLIENTE_GDE2 =
'gde2';
87 const KEYCLIENTE_PF =
'pfcons';
88 const KEYCLIENTE_PF_MOD =
'pfmod';
89 const KEYCLIENTE_PF_ADM =
'pfadm';
90 const KEYCLIENTE_GVLOGIN =
'gvlogin';
91 const KEYCLIENTE_REGDEPARTAMENTAL =
'regdepartamental';
97 const TIPOBUSQUEDA_USUARIO =
'USUARIO';
98 const TIPOBUSQUEDA_GRUPO =
'GRUPO';
107 protected static $MYSOAPOP_TRACE =
true;
108 protected static $MYSOAPOP_WSDL_CACHE = WSDL_CACHE_BOTH;
109 protected static $MYSOAPOP_SOAP_VERSION = SOAP_1_1;
116 protected static $NAMESPACE_GVA =
'http://dgm.gva.es/ayf/war/schemas/v2_00';
117 protected static $NAMESPACE_GDE =
'urn:es:gva:dgm:tra:gde:vista:model';
118 protected static $NAMESPACE_SALT =
'http://salt.ws.edu.gva.es/';
119 protected static $NAMESPACE_CSVGVA =
'urn:es:gva:dgm:tra:csvgva';
120 protected static $NAMESPACE_GDE2 =
'urn:es:gva:dgm:tra:gde:vista:v2:model';
121 protected static $NAMESPACE_CAT_ESP =
'http://intermediacion.redsara.es/scsp/esquemas/datosespecificos';
122 protected static $NAMESPACE_CAT_PET =
'http://intermediacion.redsara.es/scsp/esquemas/V3/peticion';
123 protected static $NAMESPACE_CAT_SR =
'http://intermediacion.redsara.es/scsp/esquemas/V3/solicitudRespuesta';
124 protected static $NAMESPACE_PF = null;
125 protected static $NAMESPACE_PF_MOD = null;
126 protected static $NAMESPACE_PF_ADM = null;
127 protected static $NAMESPACE_LOGIN =
'urn:es:gva:gvlogin:sso:model';
128 protected static $NAMESPACE_REGDEPARTAMENTAL =
'urn:es:gva:mastin:departamental:model';
142 private $WSDLTimeOut;
149 protected $v_clienteWS;
164 protected $passPhrase=null;
171 private $certFile=
'';
194 protected $vTrazabilidad;
218 protected $userToken =
'';
226 protected $passUserToken =
'';
234 protected $enableTrazabilidadPAI =
true;
242 protected $enableWSSecurity =
true;
262 if (!is_array($v_wsdl))
265 __CLASS__.
':'.__METHOD__.
'['.__FILE__.
'-'.__LINE__.
']'.
266 'v_wsdl debe ser un array asociativo (autenticacion,autorizacion,firma) con las URI de los WSDL' 270 $this->v_wsdl = $v_wsdl;
273 $this->v_clienteWS = array
275 self::KEYCLIENTE_AUTENTICA => null,
276 self::KEYCLIENTE_AUTORIZA => null,
277 self::KEYCLIENTE_CATASTRO => null,
278 self::KEYCLIENTE_CATASTRO_BIENES => null,
279 self::KEYCLIENTE_CSV => null,
280 self::KEYCLIENTE_FIRMA => null,
281 self::KEYCLIENTE_GDE => null,
282 self::KEYCLIENTE_GDE2 => null,
283 self::KEYCLIENTE_PF => null,
284 self::KEYCLIENTE_PF_ADM => null,
285 self::KEYCLIENTE_PF_MOD => null,
286 self::KEYCLIENTE_SALT => null,
287 self::KEYCLIENTE_GVLOGIN => null,
288 self::KEYCLIENTE_REGDEPARTAMENTAL => null
292 $this->nsCert = null;
293 $this->enableWSSecurity =
true;
294 $this->enableTrazabilidadPAI =
true;
297 if (is_array($v_opciones))
300 if (array_key_exists(
'certFile', $v_opciones))
302 $this->setCertFile($v_opciones[
'certFile']);
303 $this->nsCert = $this->getCertificateSerial();
306 if (array_key_exists(
'keyFile', $v_opciones))
308 $this->setKeyFile($v_opciones[
'keyFile']);
311 if (array_key_exists(
'passPhrase', $v_opciones))
313 $this->setPassPhrase($v_opciones[
'passPhrase']);
316 if (array_key_exists(
'enableWSSecurity', $v_opciones))
318 $this->enableWSSecurity = $v_opciones[
'enableWSSecurity'] &&
true;
321 if (array_key_exists(
'userToken', $v_opciones))
323 $this->userToken = $v_opciones[
'userToken'];
326 if (array_key_exists(
'passUserToken', $v_opciones))
328 $this->passUserToken = $v_opciones[
'passUserToken'];
331 if (array_key_exists(
'enableTrazabilidadPAI', $v_opciones))
333 $this->enableTrazabilidadPAI = $v_opciones[
'enableTrazabilidadPAI'] &&
true;
337 if (array_key_exists(
'idApp', $v_opciones))
339 $this->idApp = $v_opciones[
'idApp'];
343 $this->vTrazabilidad = array
345 'idApp' => $this->idApp,
346 'nsCert'=> $this->nsCert
350 $this->setDebugMode(
DEBUG);
351 $this->_debugInfo = array();
352 $this->WSDLTimeOut = 15;
375 case self::KEYCLIENTE_CATASTRO:
376 case self::KEYCLIENTE_CATASTRO_BIENES:
377 require_once
'WS/catastro/WSClientCatastro.php';
378 require_once
'WS/catastro/ComposerCatastro.php';
379 require_once
'WS/catastro/objCatastro.php';
385 case self::KEYCLIENTE_CSV:
386 require_once
'WS/CSV/WSClientCSV.php';
392 case self::KEYCLIENTE_AUTENTICA:
393 require_once
'WS/SAFE/WSClientAutentica.php';
397 case self::KEYCLIENTE_AUTORIZA:
398 require_once
'WS/SAFE/WSClientAutoriza.php';
402 case self::KEYCLIENTE_FIRMA:
403 require_once
'WS/SAFE/WSClientFirma.php';
408 case self::KEYCLIENTE_GDE:
409 require_once
'WS/GDE/WSClientGDE.php';
414 case self::KEYCLIENTE_GDE2:
415 require_once
'WS/GDE/WSClientGDE2.php';
416 require_once
'WS/GDE/ComposerGDE2.php';
421 case self::KEYCLIENTE_SALT:
422 require_once
'WS/SALT/WSClientSALT.php';
428 case self::KEYCLIENTE_GVLOGIN:
429 require_once
'WS/GVLOGIN/WSClientGVLogin.php';
435 case self::KEYCLIENTE_PF:
436 case self::KEYCLIENTE_PF_MOD:
437 case self::KEYCLIENTE_PF_ADM:
438 require_once
'WS/PORTAFIRMAS/WSClientPortafirmas.php';
439 require_once
'WS/PORTAFIRMAS/ComposerPortafirmas.php';
445 case self::KEYCLIENTE_REGDEPARTAMENTAL:
446 require_once
'WS/REGDEPARTAMENTAL/WSClientRegDepartamental.php';
447 require_once
'WS/REGDEPARTAMENTAL/ComposerRegDepartamental.php';
455 error_log(
'Clave cliente no reconocida. ('.$wsClient.
')');
460 if (is_array($v_opciones))
463 if (array_key_exists(
'certFile', $v_opciones))
465 $wsClient->setCertFile($v_opciones[
'certFile']);
466 $wsClient->nsCert = $wsClient->getCertificateSerial();
469 if (array_key_exists(
'keyFile', $v_opciones))
471 $wsClient->setKeyFile($v_opciones[
'keyFile']);
474 if (array_key_exists(
'passPhrase', $v_opciones))
476 $wsClient->setPassPhrase($v_opciones[
'passPhrase']);
479 if (array_key_exists(
'enableWSSecurity', $v_opciones))
481 $wsClient->enableWSSecurity = $v_opciones[
'enableWSSecurity'] &&
true;
484 if (array_key_exists(
'userToken', $v_opciones))
486 $wsClient->userToken = $v_opciones[
'userToken'];
489 if (array_key_exists(
'passUserToken', $v_opciones))
491 $wsClient->passUserToken = $v_opciones[
'passUserToken'];
494 if (array_key_exists(
'enableTrazabilidadPAI', $v_opciones))
496 $wsClient->enableTrazabilidadPAI = $v_opciones[
'enableTrazabilidadPAI'] &&
true;
500 if (array_key_exists(
'idApp', $v_opciones))
502 $wsClient->idApp = $v_opciones[
'idApp'];
505 $wsClient->loadTracertPAI($v_opciones);
521 return($this->_debugMode);
533 return $this->_debugInfo;
546 self::$MYSOAPOP_TRACE =
true;
547 $this->_debugMode = $activo;
550 self::$MYSOAPOP_WSDL_CACHE = WSDL_CACHE_NONE;
554 self::$MYSOAPOP_WSDL_CACHE = WSDL_CACHE_MEMORY;
555 $this->_debugInfo = array();
570 $this->_debugInfo[] = $info;
585 $this->keyFile = $pathKey;
597 $this->passPhrase = $passphrase;
609 $this->certFile = $pathCert;
621 $this->WSDLTimeOut = $segs;
634 if (empty($this->certFile))
636 throw new Exception(
'No se ha fijado valor para el certificado o el mismo no existe.');
639 $certFile = realpath($this->certFile);
640 if ($certFile ===
false)
642 throw new Exception(
'No existe el fichero de cetificado: '.$this->certFile);
645 $cert = file_get_contents($certFile);
648 throw new Exception(
'No puede leerse el certificado : '.$certFile);
651 $v_certData = openssl_x509_parse($cert,
true);
652 $nsCert = strtoupper(self::numberBaseConvert($v_certData[
'serialNumber']));
655 $this->nsCert = $nsCert;
673 $certPath = realpath($ruta);
675 $certContent = file_get_contents($certPath);
676 if ($certContent ===
false)
679 __CLASS__.
':'.__METHOD__.
'['.__FILE__.
']-L'.__LINE__.
680 '. El certificado no se encuentra en la ruta: '.$certPath
686 $formato = pathinfo($certPath, PATHINFO_EXTENSION);
689 $formato = trim(strtoupper($formato));
694 $v_certPEM = array();
695 openssl_pkcs12_read($certContent, $v_certPEM,
'');
696 $cert = $v_certPEM[
'cert'];
701 $cert = $certContent;
705 $v_certData = openssl_x509_parse($cert,
true);
706 if ($v_certData ===
false)
709 __CLASS__.
':'.__METHOD__.
'['.__FILE__.
']-L'.__LINE__.
'.'.
710 'El formato del certificado no se corresponde con '.$formato
728 if (!is_array($vTrazabilidadPAI))
730 throw new Exception(
'Las opciones de trazabilidad deben ser un array asociativo [idApp, nsCert]');
733 if (array_key_exists(
'idApp', $vTrazabilidadPAI))
735 $this->idApp = $vTrazabilidadPAI[
'idApp'];
738 if (array_key_exists(
'nsCert', $vTrazabilidadPAI))
740 $this->nsCert = $vTrazabilidadPAI[
'nsCert'];
751 $this->enableWSSecurity =
true;
761 $this->enableWSSecurity =
false;
771 $this->enableTrazabilidadPAI =
true;
781 $this->enableTrazabilidadPAI =
false;
796 if (empty($tipo))
return null;
798 $tipo = trim(strtolower($tipo));
801 $this->__clienteOn($tipo);
803 if (!is_object($this->v_clienteWS[$tipo]))
806 return ($this->v_clienteWS[$tipo]);
831 protected function __clienteOn($tipo, $trazabilidadPai=
true, $opcionesClienteWS = null)
833 $vTiposCliente = array();
836 $tipo = trim(strtolower($tipo));
838 if (array_key_exists($tipo, $this->v_clienteWS))
840 $vTiposCliente = array($tipo);
844 if ($this->getDebugMode())
846 $this->addDebugInfo(__CLASS__.
':'.__METHOD__.
'['.__FILE__.
'-'.__LINE__.
']'.
' Tipo de cliente WS ('.$tipo.
') no reconocido.');
849 __CLASS__.
':'.__METHOD__.
'['.__FILE__.
']-L'.__LINE__.
'.'.
850 'Tipo de cliente WS ('.$tipo.
') no reconocido' 871 if (!is_array($opcionesClienteWS))
887 $opcionesClienteWS = array (
888 'soap_version' => SOAP_1_1,
889 'user_agent' =>
'WSSSoapClient',
890 'exceptions' =>
true,
891 'cache_wsdl' => self::$MYSOAPOP_WSDL_CACHE,
892 'trace' => self::$MYSOAPOP_TRACE
897 $opcionesClienteWS[
'soap_version'] = SOAP_1_1;
898 $opcionesClienteWS[
'user_agent'] =
'WSSSoapClient';
899 $opcionesClienteWS[
'exceptions'] =
true;
900 $opcionesClienteWS[
'cache_wsdl'] = self::$MYSOAPOP_WSDL_CACHE;
901 $opcionesClienteWS[
'trace'] = self::$MYSOAPOP_TRACE;
904 if ($this->getDebugMode())
906 $this->addDebugInfo(
"Opciones:\n ".print_r($opcionesClienteWS,
true));
909 foreach ($vTiposCliente as $claveTipo)
911 if (is_object($this->v_clienteWS[$claveTipo]))
continue;
915 if (ini_get(
'allow_url_fopen') ==
true)
919 'timeout' => $this->WSDLTimeOut
922 'timeout' => $this->WSDLTimeOut
925 'verify_peer' =>
false,
926 'allow_self_signed' =>
true 930 $sc = stream_context_create($opciones);
931 $fd = fopen($this->v_wsdl[$claveTipo],
'r',
false, $sc);
934 throw new Exception(
'allow_url_fopen activo. La URL '.$this->v_wsdl[$claveTipo].
' no puede alcanzarse.');
989 if ($this->getDebugMode())
991 $this->addDebugInfo(__CLASS__.
':'.__METHOD__.
'['.__FILE__.
'-'.__LINE__.
']'.
' allow_url_fopen NO ACTIVO y Extensión CURL NO ACTIVA');
996 $clienteWS =
new WSSSoapClient($this->v_wsdl[$claveTipo], $opcionesClienteWS);
998 if ($this->enableWSSecurity ==
true)
1000 $clienteWS->setCertFile($this->certFile);
1001 $clienteWS->setKeyFile($this->keyFile);
1002 $clienteWS->setPassPhrase($this->passPhrase);
1003 $clienteWS->setUserToken($this->userToken, $this->passUserToken);
1004 $clienteWS->enableWSSecurity();
1008 $clienteWS->disableWSSecurity();
1011 if ($this->enableTrazabilidadPAI)
1013 $clienteWS->loadTracertPAI($this->vTrazabilidad);
1015 $this->v_clienteWS[$claveTipo] = $clienteWS;
1019 if ($this->getDebugMode())
1021 $this->addDebugInfo(__CLASS__.
':'.__METHOD__.
'['.__FILE__.
'-'.__LINE__.
']'.
"\n");
1022 if (is_object($clienteWS))
1024 $this->addDebugInfo(
"RqH:\n ".$clienteWS->__getLastRequestHeaders());
1025 $this->addDebugInfo(
"Rq:\n ".$clienteWS->__getLastRequest());
1026 $this->addDebugInfo(
"RsH:\n ".$clienteWS->__getLastResponse());
1027 $this->addDebugInfo(
"Rs:\n ".$clienteWS->__getLastResponseHeaders());
1030 $this->addDebugInfo(
"\n");
1048 if (!is_array($array))
return;
1050 if (is_numeric(key($array)))
1052 foreach ($array as $key => $value)
1054 $array[$key] = $this->array2ObjectTree($value);
1059 foreach ($array as $key => $value)
1061 if (is_array($value))
1063 $Object->$key = $this->array2ObjectTree($value);
1067 $Object->$key = $value;
1082 if (is_array($obj) || is_object($obj))
1085 foreach ($obj as $key => $value)
1087 $result[$key] = $this->objectTree2array($value);
1095 protected function tratarExcepcionEstandar($e, $clienteWS)
1098 WSComunPAIException::tryToThrow($e);
1101 if ($this->getDebugMode())
1103 $this->addDebugInfo(__CLASS__.
':'.__METHOD__.
'['.__FILE__.
'-'.__LINE__.
']'.
"\n");
1104 if (is_object($clienteWS))
1106 $this->addDebugInfo(
"RqH:\n ".$clienteWS->__getLastRequestHeaders());
1107 $this->addDebugInfo(
"Rq:\n ".$clienteWS->__getLastRequest());
1108 $this->addDebugInfo(
"RsH:\n ".$clienteWS->__getLastResponse());
1109 $this->addDebugInfo(
"Rs:\n ".$clienteWS->__getLastResponseHeaders());
1133 $mimeBoundary =
'--MIME_Boundary';
1134 $vBodyResponse = explode($mimeBoundary, $response);
1135 $numElementos = count($vBodyResponse);
1138 if ($numElementos<=1)
1140 $mimeBoundary =
'--uuid:';
1141 $vBodyResponse = explode($mimeBoundary, $response);
1142 $numElementos = count($vBodyResponse);
1143 $srcData = $response;
1145 elseif ($numElementos>1)
1147 $srcData = $vBodyResponse[1];
1150 $vRespuesta = array();
1151 ini_set(
'pcre.backtrack_limit',
'100000000');
1152 preg_match(
"/<[a-z]*:Envelope.*?>(.*)<\/[a-z]*:Envelope>/is", $srcData, $vRespuesta);
1153 if (preg_last_error()!=PREG_NO_ERROR)
1156 $start = stripos($srcData,
':Envelope');
1157 $start = strripos($srcData,
'<', $start - strlen($srcData));
1158 $end = strripos($srcData,
':Envelope>');
1159 $cadenaRespuesta = substr($srcData, $start, $end);
1161 elseif (count($vRespuesta)<1)
1163 throw new Exception(
'No puede ubicarse RESPONSE dentro de MTOM');
1167 $cadenaRespuesta = $vRespuesta[0];
1172 $dom->loadXML($cadenaRespuesta);
1173 $xpath = new \DOMXpath($dom);
1174 $vNodoRespuesta = $xpath->query(
"/*[local-name()='Envelope']/*[local-name()='Body']/*/*[local-name()='respuesta']");
1176 if (!empty($itemToReturn))
1178 $subStrXpath =
"/*[local-name()='{$itemToReturn}']";
1180 $vNodoRespuesta = $xpath->query(
"/*[local-name()='Envelope']/*[local-name()='Body']/*".$subStrXpath);
1181 $nodoRespuesta = $vNodoRespuesta->item(0);
1183 if ($numElementos>0)
1186 $oMime = $oMimeParser->decodeMTOM($vBodyResponse);
1187 unset($oMime->body);$oMime->body=null;gc_collect_cycles();
1189 $vNodoInclude = $xpath->query(
"//*[local-name()='Include']");
1190 foreach ($vNodoInclude as $nodoItem)
1192 $subIdBuscado = (string) $nodoItem->getAttribute(
'href');
1193 $subIdBuscado = urldecode($subIdBuscado);
1194 $idBuscado =
'<'.substr($subIdBuscado, 4).
'>';
1195 foreach ($oMime->parts as &$parte)
1197 if ($idBuscado == ($parte->headers[
'content-id']))
1199 if ( strtolower(substr($parte->mimetype, 0, 4)) !==
'text')
1201 $parte->body = base64_encode($parte->body);
1203 $textNode = $dom->createTextNode(($parte->body));
1204 $nodoItem->parentNode->replaceChild($textNode, $nodoItem);
1209 return($this->xml_to_array($nodoRespuesta));
1215 protected function xml_to_array(&$root)
1218 if ($root->hasAttributes())
1220 $attrs = $root->attributes;
1221 foreach ($attrs as $attr)
1223 $result[
'@attributes'][$attr->name] = $attr->value;
1226 if ($root->hasChildNodes())
1228 $children = $root->childNodes;
1229 if ($children->length == 1)
1231 $child = $children->item(0);
1232 if ($child->nodeType == XML_TEXT_NODE)
1234 $result[
'_value'] = $child->nodeValue;
1235 return count($result) == 1 ? $result[
'_value'] : $result;
1239 foreach ($children as $child)
1241 if (!isset($result[$child->nodeName]))
1243 $result[$child->nodeName] = $this->xml_to_array($child);
1247 if (!isset($groups[$child->nodeName]))
1249 $result[$child->nodeName] = array($result[$child->nodeName]);
1250 $groups[$child->nodeName] = 1;
1252 $result[$child->nodeName][] = $this->xml_to_array($child);
1273 $chars =
"0123456789abcdefghijklmnopqrstuvwxyz";
1274 $tostring = substr($chars, 0, $tobase);
1275 $length = strlen($numstring);
1278 for ($i = 0; $i < $length; $i++)
1280 $number[$i] = strpos($chars, $numstring{$i});
1286 for ($i = 0; $i < $length; $i++)
1288 $divide = $divide * $frombase + $number[$i];
1289 if ($divide >= $tobase)
1291 $number[$newlen++] = (int)($divide / $tobase);
1292 $divide = $divide % $tobase;
1293 } elseif ($newlen > 0)
1295 $number[$newlen++] = 0;
1299 $result = $tostring{$divide} . $result;
1300 }
while ($newlen != 0);
1312 if (getenv(
'HTTP_CLIENT_IP'))
1314 $ip = getenv(
'HTTP_CLIENT_IP');
1316 else if(getenv(
'HTTP_X_FORWARDED_FOR'))
1318 $ip = getenv(
'HTTP_X_FORWARDED_FOR');
1320 else if (getenv(
'HTTP_X_FORWARDED'))
1322 $ip = getenv(
'HTTP_X_FORWARDED');
1324 else if(getenv(
'HTTP_FORWARDED_FOR'))
1326 $ip = getenv(
'HTTP_FORWARDED_FOR');
1328 else if(getenv(
'HTTP_FORWARDED'))
1330 $ip = getenv(
'HTTP_FORWARDED');
1332 else if(getenv(
'REMOTE_ADDR'))
1334 $ip = getenv(
'REMOTE_ADDR');
1360 const ERROR_SERVICIO =
'0101';
1361 const TIMESTAMP_INVALIDO =
'0230';
1362 const ORGANISMO_NO_AUTORIZADO =
'0301';
1363 const CERTIFICADO_CADUCADO =
'0302';
1364 const CERTIFICADO_REVOCADO =
'0303';
1365 const FIRMA_PETICION_NO_VALIDA =
'0305';
1366 const PETICION_SIN_NODO_FIRMA =
'0307';
1367 const ESTRUCURA_XML_NO_CORRESPONDE_A_ESQUEMA =
'0401';
1368 const MENSAJE_XML_INVALIDO =
'0403';
1369 const OPERACION_SOLICITADA_INCORRECTA =
'0800';
1370 const FALTA_CABECERA_TRAZABILIDAD =
'0807';
1371 const INFO_TRAZABILIDAD_INCOHERENTE =
'0808';
1372 const ERROR_GENERAL_INDEFINIDO =
'0904';
1375 private $CodigoEstado =
'';
1376 private $CodigoEstadoSecundario =
'';
1377 private $LiteralError =
'';
1378 private $LiteralErrorSec =
'';
1380 public function getCodigoEstado() {
1381 return $this->CodigoEstado;
1383 public function getCodigoEstadoSecundario() {
1384 return $this->CodigoEstadoSecundario;
1386 public function getLiteralError() {
1387 return $this->LiteralError;
1389 public function getLiteralErrorSec() {
1390 return $this->LiteralErrorSec;
1395 public function __construct($soapFault) {
1397 $faultCode = intval($soapFault->detail->Atributos->Estado->CodigoEstado);
1398 $faultString = $soapFault->detail->Atributos->Estado->LiteralError;
1401 parent::__construct($faultString, $faultCode, $soapFault);
1404 $this->CodigoEstado = $soapFault->detail->Atributos->Estado->CodigoEstado;
1405 $this->CodigoEstadoSecundario = $soapFault->detail->Atributos->Estado->CodigoEstadoSecundario;
1406 $this->LiteralError = $soapFault->detail->Atributos->Estado->LiteralError;
1407 $this->LiteralErrorSec = $soapFault->detail->Atributos->Estado->LiteralErrorSec;
1410 public function __toString() {
1411 return __CLASS__ .
": [{$this->code}] {$this->message}\n";
1425 if (($e instanceof \SoapFault) && ($e->faultcode ==
'soap-env:PAI')) {
tratarMTOMEstandar($response, $itemToReturn=null)
static numberBaseConvert($numstring, $frombase=10, $tobase=16)
static makeWSClient($wsID, $v_wsdl, $v_opciones=null)
__construct($v_wsdl, $v_opciones=null)
static getCertificateInfo($ruta, $formato=null)
setPassPhrase($passphrase)
loadTracertPAI($vTrazabilidadPAI)
__clienteOn($tipo, $trazabilidadPai=true, $opcionesClienteWS=null)
getCertificateSerial($set=true)