La cuestion es que tengo que acceder a un servicio web creado en .net desde php y parece ser que no me deja acceder, siempre me responde: HTTP/1.1 401 Unauthorized
El proveedor me ha pasado este script .net para acceder:
Código:
#region VARIABLES GLOBALES DataSet oDs = new DataSet(); long lngResultado; int intResultado; #endregion #region REF. A SERVICIOS WEB ,CREDENCIALES Y CARGA DE XML DE PRUEBA // Inicializacion de servicios WEb BuscadorPropiedades.Propiedades oWsBuscadorPropiedades = new DebugWsHabitania.BuscadorPropiedades.Propiedades(); //esto es muy importante sin esto no puedes llamar al servicio CredentialCache oCredentials = new CredentialCache(); string sUserWS = "xxxxxxx"; string sPassWs = "xxxxxxxx"; string sDomWs = "DOMINIO"; int [] caracteristicas = new int[2]; oCredentials.Add(new System.Uri(oWsBuscadorPropiedades.Url),"Basic",new NetworkCredential(sUserWS,sPassWs,sDomWs)); //Asignacion de credenciales oWsBuscadorPropiedades.Credentials = oCredentials; oCredentials = null; //aqui cargamos el xml de arriba de ejemplo XmlDocument oXml = new XmlDocument(); oXml.Load(@"C:\XML\Servicio WEB Nuevos\PruebaServicioWeb.xml"); #endregion //llamada al servicio web. Para nosotros es un objeto al que ya hemos hecho referencia. oDs = oWsBuscadorPropiedades.ObtenerEquipamientosPropiedad(oXml); foreach (DataRow oRow in oDs.Tables[0].Rows) { Response.Write (oRow[0].ToString() + "<br>"); Response.Write (oRow[1].ToString() + "<br>"); }
El archivo xml que se le envia al servicio web es:
Código:
Ahora bien, os voy a poner cómo llamo desde php:<?xml version="1.0" encoding="ISO-8859-1" ?> <parametros> <general> <p name="usuario">xxxxxx</p> <p name="idIdioma">34</p> <p name="idPais">34</p> <p name="idComunidad">-1</p> <p name="idProvincia">94</p> <p name="idLocalidad">41001</p> </general> <parameters> <p name="e_idComboProducto">28</p> <p name="list_Transacciones">2</p> <p name="list_Provincias">94</p> <p name="list_Localidades">41001</p> <p name="e_PrecioDesde">400000</p> <p name="e_Preciohasta">2000000</p> <p name="e_MetrosDesde">10</p> <p name="e_Metroshasta">200</p> <p name="e_DormitoriosDede">2</p> <p name="e_Referencia">AH0427</p> <p name="e_IDProperty">1064931</p> <p name="e_idTransaccionPropiedad">994561</p> <p name="e_idEntidadCliente">777</p> </parameters> </parametros>
Código:
Y nada, imposible no consigo que el servicio web me deje acceder, siempre 401.<?php require_once('lib/nusoap.php'); $soapclient->debug_flag=true; $myxml='<?xml version="1.0" encoding="ISO-8859-1"?>'; $myxml.='<parametros>'; $myxml.='<general>'; $myxml.='<p name="usuario">xxxxxx</p>'; $myxml.='<p name="idIdioma">34</p>'; $myxml.='<p name="idProvincia">94</p>'; $myxml.='</general>'; $myxml.='<parameters>'; $myxml.='</parameters>'; $myxml.=' </parametros>'; $params = array('oXMLEntrada'=>$myxml); $user = 'xxxxxxx'; $pass = 'xxxxxxx'; $wsdl = "http://urlservicioWSDL"; $client = new SoapClient($wsdl, array( 'trace' => 2, 'location' => $wsdl, 'login' => $user, 'password' => $pass, 'authentication' => SOAP_AUTHENTICATION_DIGEST )); $result = $client->call('ObtenerLocalidades', $params); echo '<h2>Request</h2><pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>'; echo '<h2>Response</h2><pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>'; echo '<h2>Debug</h2><pre>' . htmlspecialchars($client->debug_str, ENT_QUOTES) . '</pre>'; ?>
La cosa cuirosa es que en php5 tampoco me deja acceder a las funciones pero si que me devuelve por ejemplo la lista de funciones con getfuntions()
Alguna idea? El proveedor dice que hay que hacer la autentificacion con credenciales, pero no se como se hace desde php.
Bueno gracias a todos de antemano y feliz verano!!!