Page 1 of 1

Web Services

PostPosted: 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/viewtopic.php?f=6&t=27290&p=151734&hilit=URLDownLoad#p151734
3. Extraigo la informacion que necesito de ese archivo.

Aqui esta el codigo.
Code: Select all  Expand view

 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

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

Re: Web Services

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

Muchas gracias por compartirlo con todos nosotros :-)

Re: Web Services

PostPosted: 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  Expand view

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

PostPosted: 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

PostPosted: 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

PostPosted: Tue May 26, 2015 1:37 am
by carlos vargas
Code: Select all  Expand view
#include "dll.ch"

Re: Web Services

PostPosted: 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/viewtopic.php?f=6&t=27290&p=151734&hilit=URLDownLoad#p151734
3. Extraigo la informacion que necesito de ese archivo.

Aqui esta el codigo.
Code: Select all  Expand view

 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

PostPosted: 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

PostPosted: 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

PostPosted: 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

PostPosted: 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.

Re: Web Services

PostPosted: Tue May 18, 2021 11:46 pm
by Educuzco
Buen Dia a todos
efectivamente este año la sunat cambio la forma de consulta ruc en web services
ahora utiliza token si alguien tiene desarrollado la consulta se agradeceria que lo comparta
esta es la nueva url http://e-consultaruc.sunat.gob.pe/cl-ti ... crS00Alias
Gracias de antemano
Saludos
Educuzco

Re: Web Services

PostPosted: Sat May 22, 2021 6:13 am
by Dioni
Hola amigos de PERU....

Pueden utilizar esta funcion para conectarse a sunat y reniec y extraer datos para facturacion electronica
yo lo utilizo ya hace dos años.

el link es : https://www.apisperu.com/servicios/dniruc/
te registras y te dan tu token para ingresar.


doc = CreateObject("MSXML2.DOMDocument")
ohttp = CreateObject( "MSXML2.XMLHTTP" )
do case
case len(xnruc)=11
ohttp:Open( "GET" ,"https://dniruc.apisperu.com/api/v1/ruc/&xnruc",.F.)
case len(xnruc)=8
ohttp:Open( "GET" ,"https://dniruc.apisperu.com/api/v1/dni/&xnruc",.F.)
Othe
msginfo("Error Ingreso","Intente Nuevamente")
Retu nil
Endc
&:='jdjddjjd.dcd..c.d.cd..cdcd.d.c.d.cd.cd.c.dc.d.cd.d.dc.dc.d.cd.cd.c.dc.d.cd.c.d' // remplazar valor de token que te enviaran por correo y listo ...
oHttp:SetRequestHeader("cache-control", "no-cache")
ohttp:SetRequestHeader("content-type", "application/json" )
ohttp:SetRequestHeader("Authorization", "Bearer &token" )
TRY
ohttp:Send('&xnruc')
CATCH
msginfo("No Se Pudo Enviar Documento JSON","Intente Nuevamente")
return .t.
END
response:=ohttp:responseText
?response // repuesta con los datos de sunat o reniec

Re: Web Services

PostPosted: Sat May 22, 2021 6:07 pm
by artu01
Gracias Dioni
funciona perfecto!, solo que permite 2000 consultas al mes porque es un servicio gratuito pero haz intentado hacerlo directamente con el ws de Sunat?