Ayuda para consumir un web Service

511 views
Skip to first unread message

Edgar Acevedo

unread,
Mar 5, 2016, 9:18:55 AM3/5/16
to Comunidad de Visual Foxpro en Español
Saludos compañeros:

Necesito extraer un dato de una variable llamada "TipoCambioDia" de un Web Service público.
La dirección de donde se consume el servicio es:  http://www.banguat.gob.gt/variables/ws/TipoCambio.asmx?WSDL
"Me parece" que la forma de solicitar a ese servicio que me de un XML conteniendo la información de "TipoCambioDia" es mediante el envio de un XML de "consulta", por ello hice el siguiente código:

* Aquí creo lo que según yo, sería la forma de consultar el dato "TipoCambioDia" del Web Service.
TEXT TO XMLVAR
   <soapenv:Body>
      <ws:TipoCambioDia/>
   </soapenv:Body>
</soapenv:Envelope>
ENDTEXT

* Y aquí intento obtener el resultado haciendo el respectivo REQUEST
oCambio=CREATEOBJECT("msxml2.xmlhttp")
oCambio.SEND(XMLVAR)
M.Respuesta = oCambio.ResponseText
IF FILE('C:\RESPONSE.XML')
   ERASE C:\RESPONSE.XML
ENDIF
STRTOFILE(M.Respuesta, 'C:\RESPONSE.XML')
IF FILE('C:\RESPONSE.XML')
   MODIFY COMMAND C:\RESPONSE.XML
ENDIF

Pero... no me funciona.  Obtengo un XML indicándome las variables disponibles, como quien dice: "lo está solicitando mal".
Probé en la utilería LoadUI mi XML de consulta (el que tengo en la variable XMLVAR) y allí si obtengo el XML con la respuesta deseada. Pero al ejecutarlo en VFP con el código arriba indicado, me falla.
Supongo que el problema está en la línea 

oCambio.SEND(XMLVAR)

Pero...  ¿Qué estoy haciendo mal?

Carlos Alfaro

unread,
Mar 5, 2016, 9:27:19 AM3/5/16
to publice...@googlegroups.com

Este si funciona.

 

Bendiciones.

 

Carlos Alfaro

webservice_banguat._prg

Edgar Acevedo

unread,
Mar 5, 2016, 10:02:22 AM3/5/16
to publicesvfoxpro
Te estoy muy agradecido Carlos.
El programa que me enviaste no solo funciona, sino que está bastante fácil de seguir y entender que era lo que yo estaba haciendo mal.
Gracias a tu oportuna ayuda, logré hacer mi propia versión que me quedó de la siguiente manera:

* Creación del XML de consulta (Request)
TEXT TO XMLVar NOSHOW
   <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ws="http://www.banguat.gob.gt/variables/ws/">
      <soap:Header/>
      <soap:Body>
         <ws:TipoCambioDia/>
      </soap:Body>
   </soap:Envelope>
ENDTEXT

* Creación del XML de consulta (Request)
oCambio=CREATEOBJECT("Msxml2.ServerXMLHTTP.6.0")
oCambio.OPEN("POST","http://www.banguat.gob.gt/variables/ws/TipoCambio.asmx?WSDL", .F.)
oCambio.setRequestHeader("User-Agent", "Tasa de Cambio del Quetzal contra el Dolar")
oCambio.setRequestHeader("Content-Type", "text/xml;charset=utf-8")
oCambio.SEND(XMLVAR)
M.Respuesta = oCambio.ResponseText

* Parseo del XML obtenido como respuesta
M.TasaCAmbio = STREXTRACT(M.Respuesta,'<referencia>','</referencia>')
? "La tasa de cambio de hoy es Q.", ALLTRIM(M.TasaCambio), "por US $ 1"

Una vez más, muy agradecido por tu generosa ayuda Carlos.



Reply all
Reply to author
Forward
0 new messages