Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/05/2011, 16:33
mirandaphp5
 
Fecha de Ingreso: mayo-2011
Mensajes: 19
Antigüedad: 13 años, 11 meses
Puntos: 2
Con sumir servicio .net desde php

hola a todos, me acabo de registrar en este sitio y para ir colaborando con ustedes les dejo la forma de consumir un servicio de .net desde php5, espero les ayude.

no olvidar las gracias

primero debemos instanciar la clase soapclient

$cliente= new SoapClient('servicio.asmx?wsdl');

luego ingresemos directamente al servicio en este caso servicio.asmx

luego pinchas el metodo que quieres consumir.

te arrojara un xml algo asi

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<nombremetodo xmlns="http://tempuri.org/...">
<otronombre>
<Var1>string</Var1>
<Var2>long</Var2>
</otronombre>
</nombremetodo >
</soap:Body>
</soap:Envelope>


si se fijan las variables al pasar al servicio son "Var1" y "Var2", las cuales tienen un nodo padre llamado "otronombre" y este a su vez "nombremetodo"

vamos declarar una variable como arreglo en la que iran las variables que pide el servicio

$param=array();
$param['Var1']='datos variable 1';
$param['Var2']='datos variable 2';

si se fijan asigno valores y el nombre de cada valor es el mismo nombre de variable que recibe el servicio

en php se mandan las varibles como arreglo y si en .net estas variables tienen nodos padres, en php se los tienes que mandar como objetos sigamos.

como las variables tienen un nodo padre, quiere decir que este arreglo debe estar en un objeto, esto queda asi

$param=(object) $param;
como vieron el xml en este caso las variables tenia un nodo padre y este otro nodo padre

primero declararemos el nodo padre que sera un array en php

$padre=array();
$padre[otronombre']=$param;

declaramos el nodo padre y le asignamos nodos hijos de este padre

y como 'otronombre' tambien tiene un nodo padre este debe ir en un objeto

$padre=(object) $padre;

despues de tener las variables listas llamamos al metodo

$resultado=$cliente->nombremetodo($padre);

var_dump($resultado);

en resumidas cuentas debe quedar asi;

$cliente= new SoapClient('servicio.asmx?wsdl');

$param=array();
$param['Var1']='datos variable 1';
$param['Var2']='datos variable 2';
$param=(object) $param;
$padre=array();
$padre[otronombre']=$param;
$padre=(object) $padre;
$resultado=$cliente->nombremetodo($padre);
var_dump($resultado);

listo ojala les sea de utilidad.