tutorial ejemplos ejemplo php xml web-services soap

ejemplos - Cadenas no deseadas asociadas al inicio y al final de una respuesta SOAP en PHP SoapClient



web service php soap ejemplo (3)

Solicitándote que pruebes usando la consulta siguiente

$headers = array( "POST: ".url." HTTP/1.1", "Host: ".domain."", "Accept-Encoding: gzip,deflate", "Content-type: text/xml;charset=UTF-8", "SOAPAction: /"http://tempuri.org/wsdlurl/methodname/"", "Connection: Keep-Alive", "Content-length:".strlen($xml), "User-Agent: Apache-HttpClient/4.1.1 (java 1.5) " ) $url = your url; $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_ENCODING, ''''); curl_setopt($ch, CURLOPT_POSTFIELDS, $options); // the SOAP request curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($ch); $err = curl_error($ch); $doc = new DOMDocument(); $doc->loadXML( $response ); $authKey = $doc->getElementsByTagName( "fieldname" );

Estoy ejecutando el siguiente código php al intentar obtener una solicitud de un servidor SOAP API

try { $soap = new SoapClient($wsdl, $options); $data = $soap->GetXYZ($params); } catch(Exception $e) { $Lastresponse = $soap->__getLastResponse(); }

Todo lo que obtuve fue el código de respuesta "parece que no obtuvimos ningún documento XML".

Pero cuando miré la variable $ Lastresponse en el bloque catch, la encontré de la siguiente manera:

------=_Part_1134075_393252946.1482317378966 Content-Type: application/xop+xml; charset=utf-8; type="text/xml" <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header/> <SOAP-ENV:Body> ......all valid data ... </SOAP-ENV:Body> </SOAP-ENV:Envelope> ------=_Part_1134075_393252946.1482317378966--

Nota: los parámetros $ options que estoy usando son:

$options = array( ''uri''=>''http://schemas.xmlsoap.org/soap/envelope/'', //''style''=>SOAP_RPC, //''use''=>SOAP_ENCODED, ''soap_version''=>SOAP_1_1, ''cache_wsdl''=>WSDL_CACHE_NONE, ''connection_timeout''=>15, ''trace''=>true, ''encoding''=>''UTF-8'', ''exceptions''=>true );

A pesar de que hice una solución para analizar el xml, ¿alguien tiene alguna idea sobre esos bits extras de parte? ¿Hay algo que estoy haciendo mal?


Debes atrapar Excepción:

SoapClient :: SoapClient () generará un error E_ERROR si las opciones de ubicación y uri no se proporcionan en modo no WSDL.

Se lanzará una excepción SoapFault si el URI wsdl no se puede cargar.


Esos -----Part Las cosas de la -----Part se llaman el límite en los mensajes de varias partes explicados aquí y definidos en RFC2387 .

Después de una investigación, parece que SoapClient es incapaz de analizar mensajes multiparte, razón por la cual obtuvo esa excepción.

La solución es extender SoapClient para extraer el contenido XML con expresiones regulares u otras funciones de cadena. Aquí hay un ejemplo de esta página :

class MySoapClient extends SoapClient { public function __doRequest($request, $location, $action, $version, $one_way = 0) { $response = parent::__doRequest($request, $location, $action, $version, $one_way); $start = strpos($response,''<?xml''); $end = strrpos($response,''>''); return substr($response,$start,$end-$start+1); } }