Page 1 of 1

Web Services

Posted: Thu Jan 09, 2014 4:33 am
by ralph
Amigos del foro:
Hace poco tuve necesidad de hacer uso de los web services, estuve investigando un poco en el foro y hay alguna informacion dispersa.
Les paso un ejemplo que me funciona y espero les sea util y puedan complementarlo con sus aportes.
Esta es la secuencia:
1. Ejecuto un web service que me devuelve un XML
Para el ejemplo uso este web service que me devuelve informacion de un RUC (Peru)
http://www.sunat.gob.pe/w/wapS01Alias?ruc=20102295961
2. Guardo el XML en un archivo texto, para esto uso una funcion que alguien compartió en otro topico
http://forums.fivetechsupport.com/viewt ... ad#p151734
3. Extraigo la informacion que necesito de ese archivo.

Aqui esta el codigo.

Code: Select all

 Function BuscaInfoRUC(cRuc)
 local r, i, s, cUrl := "http://www.sunat.gob.pe/w/wapS01Alias?ruc="+cRuc
 local cF := "test.txt", nPos
 local cN, cD, xL := ''
 if empty(cRuc)
    MsgStop("no ha ingresado RUC valido para consultar","Error")
 else
    URLDownLoad(cUrl, cF)
    if file(cF)
       r:=MemoRead(cF)
       if at('El numero Ruc ingresado es invalido',r) > 0
          Msgwait("El numero Ruc ingresado es invalido o no existe",,1)
       else
          Do while .t.
              i:=At( CRLF, r )
              If i=0
                  exit
              Endif
              s:=Left( r, i-1)

              r:=Subs( r, i+2)
              If (nP := at('Número Ruc.', s ) ) > 0
                  cN := substr(s, nP+16)
                  If (nP := at(trim(cRuc), cN ) ) > 0
                     cN := substr(cN, nP+14)
                     cN := strtran(cN,"<br/>","")
                     cN := strtran(cN,"</small>","")
                  endif
                  MsgInfo(cN)  // muestro la informacion que me interesa
                  exit
              Endif
          Enddo
       endif
    endif
 endif
 return nil


function URLDownLoad(cUrl, cSaveAs)
hLib = LOADLIBRARY( "urlmon.dll")
if !URLDownloadToFile( 0, cUrl, cSaveAs, 0, 0 ) == 0
   retu.f.
endif
FREELIBRARY( hLib )
retu.t.

DLL32 FUNCTION URLDownloadToFile(pCaller AS LONG,szURL AS STRING, szFileName AS STRING, dwReserved AS LONG, lpfnCB AS LONG);
AS LONG PASCAL;
FROM "URLDownloadToFileA";
LIB hlib
 
Espero les sea de utilidad
Si alguien tiene alguna mejor forma de hacerlo, que lo comparta.

Saludos

Ralph

Re: Web Services

Posted: Thu Jan 09, 2014 10:33 am
by MGA
muito obrigado Ralph.

Re: Web Services

Posted: Thu Jan 09, 2014 6:11 pm
by Antonio Linares
Ralph,

Muchas gracias por compartirlo con todos nosotros :-)

Re: Web Services

Posted: Fri Jan 10, 2014 11:32 am
by csincuir
Muchas gracias Ralph, no conocia esta dll.

Solo hice un pequeño cambio en tus funciones, para no utilizar el LoadLibrary(), y el FreeLibrary():

Code: Select all

function URLDownLoad(cUrl, cSaveAs)
//hLib = LOADLIBRARY( "urlmon.dll")
if !URLDownloadToFile( 0, cUrl, cSaveAs, 0, 0 ) == 0
   retu.f.
endif
//FREELIBRARY( hLib )
retu.t.

DLL32 FUNCTION URLDownloadToFile(pCaller AS LONG,szURL AS STRING, szFileName AS STRING, dwReserved AS LONG, lpfnCB AS LONG);
AS LONG PASCAL;
FROM "URLDownloadToFileA";
LIB "urlmon.dll"
//hlib
 
Saludos cordiales.

Carlos.

Re: Web Services

Posted: Tue Jan 21, 2014 4:51 pm
by Enrrique Vertiz
Ralph, gracias por tu aporte, para solucionar el problema del retorno de letras con tilde o eñe podemos añadir estos reemplazos :

cN := STRTRAN(cN,"&#209;", "Ñ")
cN := STRTRAN(cN,"&#xD1;", "Ñ")
cN := STRTRAN(cN,"&#193;", "Á")
cN := STRTRAN(cN,"&#201;", "É")
cN := STRTRAN(cN,"&#205;", "Í")
cN := STRTRAN(cN,"&#211;", "Ó")
cN := STRTRAN(cN,"&#218;", "Ú")
cN := STRTRAN(cN,"&#xC1;", "Á")
cN := STRTRAN(cN,"&#xC9;", "É")
cN := STRTRAN(cN,"&#xCD;", "Í")
cN := STRTRAN(cN,"&#xD3;", "Ó")
cN := STRTRAN(cN,"&#xDA;", "Ú")

Re: Web Services

Posted: Mon May 25, 2015 9:52 pm
by yampichu
Que librerias adicional has utilizado, ya que cuando trato de usarlo me vota un error, "Synstax error at FUNCTION"

Haber si me puedieran apoyar en esto

Re: Web Services

Posted: Tue May 26, 2015 1:37 am
by carlos vargas

Code: Select all

#include "dll.ch"

Re: Web Services

Posted: Wed Jun 03, 2015 9:41 pm
by jnavas
ralph wrote:Amigos del foro:
Hace poco tuve necesidad de hacer uso de los web services, estuve investigando un poco en el foro y hay alguna informacion dispersa.
Les paso un ejemplo que me funciona y espero les sea util y puedan complementarlo con sus aportes.
Esta es la secuencia:
1. Ejecuto un web service que me devuelve un XML
Para el ejemplo uso este web service que me devuelve informacion de un RUC (Peru)
http://www.sunat.gob.pe/w/wapS01Alias?ruc=20102295961
2. Guardo el XML en un archivo texto, para esto uso una funcion que alguien compartió en otro topico
http://forums.fivetechsupport.com/viewt ... ad#p151734
3. Extraigo la informacion que necesito de ese archivo.

Aqui esta el codigo.

Code: Select all

 Function BuscaInfoRUC(cRuc)
 local r, i, s, cUrl := "http://www.sunat.gob.pe/w/wapS01Alias?ruc="+cRuc
 local cF := "test.txt", nPos
 local cN, cD, xL := ''
 if empty(cRuc)
    MsgStop("no ha ingresado RUC valido para consultar","Error")
 else
    URLDownLoad(cUrl, cF)
    if file(cF)
       r:=MemoRead(cF)
       if at('El numero Ruc ingresado es invalido',r) > 0
          Msgwait("El numero Ruc ingresado es invalido o no existe",,1)
       else
          Do while .t.
              i:=At( CRLF, r )
              If i=0
                  exit
              Endif
              s:=Left( r, i-1)

              r:=Subs( r, i+2)
              If (nP := at('N&#xFA;mero Ruc.', s ) ) > 0
                  cN := substr(s, nP+16)
                  If (nP := at(trim(cRuc), cN ) ) > 0
                     cN := substr(cN, nP+14)
                     cN := strtran(cN,"<br/>","")
                     cN := strtran(cN,"</small>","")
                  endif
                  MsgInfo(cN)  // muestro la informacion que me interesa
                  exit
              Endif
          Enddo
       endif
    endif
 endif
 return nil


function URLDownLoad(cUrl, cSaveAs)
hLib = LOADLIBRARY( "urlmon.dll")
if !URLDownloadToFile( 0, cUrl, cSaveAs, 0, 0 ) == 0
   retu.f.
endif
FREELIBRARY( hLib )
retu.t.

DLL32 FUNCTION URLDownloadToFile(pCaller AS LONG,szURL AS STRING, szFileName AS STRING, dwReserved AS LONG, lpfnCB AS LONG);
AS LONG PASCAL;
FROM "URLDownloadToFileA";
LIB hlib
 
Espero les sea de utilidad
Si alguien tiene alguna mejor forma de hacerlo, que lo comparta.

Saludos

Ralph
Ralph,
Puedes enviarme la DLL a mi correo jnavas@datapronet.com

Re: Web Services

Posted: Thu Jun 04, 2015 9:41 am
by jnavas
Saludos
Esta funcionalidad la tiene harbour, la implemente hace mas de 7 años , no recuerdo en nombre de la función, la estoy buscando en mis aplicaciones.

Re: Web Services

Posted: Tue Jun 19, 2018 5:08 pm
by lubin
Buen dia Ralph

Estuve tratando de activar la funcion para consultar el RUC pero no me devuelve nada la funcion,
quizas cambio en algo la direccion de la web o algo parecido

Gracias
Lubin

Re: Web Services

Posted: Fri Aug 14, 2020 10:03 pm
by kerly
Buenos días amigos también he probado el ejemplo pero no devuelve nada ni siquiera crea el archivo test.txt copie la dll urlmon.dll a mi libreria pero no hace nada no se si falta alguna otra instrucción he puesto también el dll.ch si a alguien le ha funcionado por favor si nos puede orientar muchas gracias

Re: Web Services

Posted: Fri Aug 21, 2020 5:14 pm
by cjcardoza
Este webservice ya esta descontinuado hace varios años creo desde el 2017, ahora funciona con un captcha y se requiere un ejecutable adicional para el reconocimiento del mismo.