viernes, 10 de abril de 2015

PHP SoapClient usando proxy con autenticación y el encabezado HTTP/ HTTPS personalizado

Si estas recibiendo los siguientes errores al tratar de consumir un Servicio Web:

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://


Fatal error: Uncaught SoapFault exception: [ns0:Server] Debe proveer USUARIO (Username) y PASSWORD (Password) en el header HTTP

Lo Solucionas de la siguiente manera:

el primer error se produce porque  no se esta especificando el proxy en la cadena de conexion, lo solucionas de la siguiente manera:

     $url = 'https://ocppws-cert.extra.cca.org.ve/AV/BU?WSDL';
     $head = array('proxy_host'=> "proxyvz.xx.xx.xx",'proxy_port'=> 1234);
     $client = new SoapClient($url,$head);


















Ahora  el segundo error te indica que debes validarte mediante un usuario y contraseña el cual debes pasar por el encabezado, los solucionas asi:





$aHTTP['http']['header']          = "User-Agent: PHP-SOAP/5.5.11\r\n";
$aHTTP['http']['header']         .= "username: PEPE\r\n"."password: PEPE2020\r\n";
$context = stream_context_create($aHTTP);
$client=new SoapClient(
        "https://ocppws-cert.extra.cca.org.ve/AV/BU?WSDL",
        array(
            'trace' => 1,
            'proxy_host' => "proxyvz.xx.xx.xx",
            'proxy_port' => "1234",
            "stream_context" => $context
            )
);
$result = $client->jornada();



// OJO esta parte es para extraer el contenido del vector que retorna la llamada al metodo jornada()

foreach($result as $row)
    {
        $columna = explode("~",$row); //separar los datos en posiciones de arreglo
        $Movimiento=$columna[0];
    }

Bueno espero les sea de utilidad. Saludos.

David  Rafael Blanco Leon. Caracas Venezuela.