Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: |Miguel| en 21 Mayo 2012, 11:59 am



Título: Llamada a WebService mediante SOAP
Publicado por: |Miguel| en 21 Mayo 2012, 11:59 am
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.


Título: Re: Llamada a WebService mediante SOAP
Publicado por: |Miguel| en 21 Mayo 2012, 12:38 pm
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.


Título: Re: Llamada a WebService mediante SOAP
Publicado por: Graphixx en 9 Junio 2012, 16:39 pm
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.


Título: Re: Llamada a WebService mediante SOAP
Publicado por: |Miguel| en 10 Junio 2012, 12:13 pm
Muchas gracias,
Aunque ya me funcionó con el otro código siempre está bien aprender formas distintas de trabajar  ;D

Saludos.