Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/08/2007, 03:00
perrogrun
Invitado
 
Mensajes: n/a
Puntos:
Autentificación en servicio web .net desde php

Hola amigos, llevo 4 días trabajando en un proyecto y ya me he tirado de todos los pelos de la cabeza y nada.

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:
<?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>
Ahora bien, os voy a poner cómo llamo desde php:

Código:
<?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>';
	?>
Y nada, imposible no consigo que el servicio web me deje acceder, siempre 401.
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!!!