elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Llamada a WebService mediante SOAP
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Llamada a WebService mediante SOAP  (Leído 5,030 veces)
|Miguel|

Desconectado Desconectado

Mensajes: 217



Ver Perfil
Llamada a WebService mediante SOAP
« en: 21 Mayo 2012, 11:59 »

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
  1. <?php
  2. try {
  3. $soapClient = new SoapClient('http://localhost:62207/wbsCategorias.asmx?WSDL');
  4. echo('<b>RESPUESTA DE LA CONEXIÓN</b><br />');
  5. $result = $soapClient->HelloWorld();
  6. echo("'".$result."'");
  7. } catch (Exception $e) {
  8. echo('<strong>Excepción capturada:</strong> '.  $e->getMessage(). "\n");
  9. }
  10. ?>
  11.  
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.


En línea

|Miguel|

Desconectado Desconectado

Mensajes: 217



Ver Perfil
Re: Llamada a WebService mediante SOAP
« Respuesta #1 en: 21 Mayo 2012, 12:38 »

Vuelvo después de tomarme un café y darme un par de tortas.
Ya funciona.. seré burro xD
Código
  1. <?php
  2. try {
  3. $soapClient = new SoapClient('http://localhost:62207/wbsCategorias.asmx?WSDL');
  4. $result = objectToArray($soapClient->Categories());
  5. $categorias = $result["CategoriesResult"]["Categoria"];
  6. for ($i = 1; $i < count($categorias); $i++) {
  7. echo("<li><a href='category.php?id_category=".$categorias[$i]["id_categoria"]."'>".$categorias[$i]["nombre"]."</a></li>");
  8. }
  9.  
  10. } catch(Exception $e) {
  11. echo('<strong>Excepción capturada:</strong> '.  $e->getMessage(). "\n");
  12. }
  13.  
  14. function objectToArray($d){
  15. if (is_object($d))
  16. {
  17. $d = get_object_vars($d);
  18. }
  19.  
  20. if (is_array($d))
  21. {
  22. return array_map(__FUNCTION__, $d);
  23. }
  24. else
  25. {
  26. return $d;
  27. }
  28. }
  29. ?>
  30.  
Ahora mi problema es que el WS me devuelve 20 datos y el for casca en el 3º...ya veremos porqué.
Saludos.


En línea

Graphixx


Desconectado Desconectado

Mensajes: 1.336


Full Stack Developer


Ver Perfil WWW
Re: Llamada a WebService mediante SOAP
« Respuesta #2 en: 9 Junio 2012, 16:39 »

Yo lo hago con la libreria nusoap:

Código
  1.       <?php
  2. include ("lib/nusoap.php");
  3. $_id = $_GET['id'];
  4.  
  5. $wsdl = "https://www.zonapagos.com/ws_verificar_pagos/Service.asmx?WSDL"; //el nombre del archivo anterior
  6. $client=new nusoap_client($wsdl, 'wsdl');
  7. $param=array('str_id_pago'=>$_id,'int_id_tienda'=>'1234','str_id_clave'=>'123456');
  8. $response = $client->call('verificar_pago_v3', $param);
  9. //print_r($response);
  10.  
  11. //IMPRIMIMOS EL ESTADO DE LA TRANSACCION
  12. if($response['verificar_pago_v3Result'][0]==0){echo "SU PAGO FUE RECHAZADO. </br>";}
  13. if($response['res_pagos_v3']['pagos_v3']['int_estado_pago']==1){
  14. 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;
  15. }
  16. if($response['res_pagos_v3']['pagos_v3']['int_estado_pago']==999){
  17. 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;
  18. }
  19. if($response['res_pagos_v3']['pagos_v3']['int_estado_pago']==888){
  20. 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;
  21. }
  22. ?>

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.
« Última modificación: 9 Junio 2012, 16:47 por Graphixx » En línea

Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx
Mi blog
|Miguel|

Desconectado Desconectado

Mensajes: 217



Ver Perfil
Re: Llamada a WebService mediante SOAP
« Respuesta #3 en: 10 Junio 2012, 12:13 »

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

Saludos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con SOAP y PHP
PHP
WHK 1 3,914 Último mensaje 20 Julio 2012, 21:38
por WHK
Ayuda WEbService plz.
.NET (C#, VB.NET, ASP)
visualfree 2 1,596 Último mensaje 21 Abril 2013, 07:28
por .::IT::.
Capturar petición y respuesta XML de SOAP con CXF
Java
alberto2 0 1,508 Último mensaje 22 Febrero 2016, 21:10
por alberto2
llenar spinner con webservice soap
Programación General
hades645 0 348 Último mensaje 21 Mayo 2019, 00:23
por hades645
WebService SOAP XXE?
Nivel Web
cachuchin 2 551 Último mensaje 12 Mayo 2020, 05:06
por cachuchin
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines