Llamada a WebService mediante SOAP

Iniciado por |Miguel|, 21 Mayo 2012, 11:59 AM

0 Miembros y 1 Visitante están viendo este tema.

|Miguel|

Hola, buenas

Bueno mi problema es que tengo un WebServie programado en .net funcionando correctamente y no soy capaz de llamrlo desde PHP... Aunque en el título pone que la llamada es mediante SOAP, me da igual la forma de llamarlo, mientras funcione.

Cuando esto funcione bien, llamaré a un WebService que lo que devuelve es un array de objetos de una clase mia propia. ¿Se haría igual que con cadenas?

Aquí os dejo el PHP (el webservice devuelve un string):
Código (php) [Seleccionar]

<?php
try {
$soapClient = new SoapClient('http://localhost:62207/wbsCategorias.asmx?WSDL');
echo('<b>RESPUESTA DE LA CONEXIÓN</b><br />');
$result $soapClient->HelloWorld();
echo("'".$result."'");
} catch (Exception $e) {
echo('<strong>Excepción capturada:</strong> '.  $e->getMessage(). "\n");
}
?>


Y eso devuelve:
RESPUESTA DE LA CONEXIÓN

Catchable fatal error: Object of class stdClass could not be converted to string in X:\Fuentes\prestashop\modules\blockcategories\prob.php on line 7

No entiendo lo que pasa...
Gracias, un saludo.

|Miguel|

Vuelvo después de tomarme un café y darme un par de tortas.
Ya funciona.. seré burro xD
Código (php) [Seleccionar]

<?php
try {
$soapClient = new SoapClient('http://localhost:62207/wbsCategorias.asmx?WSDL');
$result objectToArray($soapClient->Categories());
$categorias $result["CategoriesResult"]["Categoria"];
for ($i 1$i count($categorias); $i++) {
echo("<li><a href='category.php?id_category=".$categorias[$i]["id_categoria"]."'>".$categorias[$i]["nombre"]."</a></li>");
}

} catch(Exception $e) {
echo('<strong>Excepción capturada:</strong> '.  $e->getMessage(). "\n");
}

function objectToArray($d){
if (is_object($d))
{
$d get_object_vars($d);
}
 
if (is_array($d))
{
return array_map(__FUNCTION__$d);
}
else
{
return $d;
}
}
?>


Ahora mi problema es que el WS me devuelve 20 datos y el for casca en el 3º...ya veremos porqué.
Saludos.

Graphixx

#2
Yo lo hago con la libreria nusoap:

Código (php) [Seleccionar]
      <?php
include ("lib/nusoap.php");
$_id $_GET['id'];

$wsdl "https://www.zonapagos.com/ws_verificar_pagos/Service.asmx?WSDL"//el nombre del archivo anterior
$client=new nusoap_client($wsdl'wsdl');
$param=array('str_id_pago'=>$_id,'int_id_tienda'=>'1234','str_id_clave'=>'123456');
$response $client->call('verificar_pago_v3'$param);
//print_r($response);

//IMPRIMIMOS EL ESTADO DE LA TRANSACCION
if($response['verificar_pago_v3Result'][0]==0){echo "SU PAGO FUE RECHAZADO. </br>";}
if($response['res_pagos_v3']['pagos_v3']['int_estado_pago']==1){
echo "En este momento su factura #".$response['res_pagos_v3']['pagos_v3']['str_id_pago']." presenta un proceso de pago cuya transacción se encuentra APROBADA;
}
if(
$response['res_pagos_v3']['pagos_v3']['int_estado_pago']==999){
echo "
En este momento su factura #".$response['res_pagos_v3']['pagos_v3']['str_id_pago']." presenta un proceso de pago cuya transacción se encuentra PENDIENTE;
}
if($response['res_pagos_v3']['pagos_v3']['int_estado_pago']==888){
echo "En este momento su factura #".$response['res_pagos_v3']['pagos_v3']['str_id_pago']." presenta un proceso de pago cuya transacción se encuentra PENDIENTE;
}
?>


Fuente:
http://sourceforge.net/projects/nusoap/

Para saber con que estructura te devuelve la peticion el webservice, te recomiendo hacer en un principio:
print_r($response);
y en la vista por el navegador, le das ver->codigo fuente.
Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx
Mi blog

|Miguel|

Muchas gracias,
Aunque ya me funcionó con el otro código siempre está bien aprender formas distintas de trabajar  ;D

Saludos.