FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Web Services
Posts: 92
Joined: Fri Nov 18, 2005 11:15 PM
Web Services
Posted: Thu Jan 09, 2014 04:33 AM
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 (fw): Select all Collapse
 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
Ralph del Castillo

Lima PERU

Fwh 24.07, xHb123_10193, MySQL 8.x, BCC 7.3
Posts: 1286
Joined: Mon Feb 25, 2008 02:54 PM
Re: Web Services
Posted: Thu Jan 09, 2014 10:33 AM

muito obrigado Ralph.

ubiratanmga@gmail.com

FWH24.04
BCC7.3
HARBOUR3.2
xMate
Pelles´C
TDolphin
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Web Services
Posted: Thu Jan 09, 2014 06:11 PM

Ralph,

Muchas gracias por compartirlo con todos nosotros :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 476
Joined: Sat Feb 03, 2007 06:36 AM
Re: Web Services
Posted: Fri Jan 10, 2014 11:32 AM
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 (fw): Select all Collapse
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.
Posts: 582
Joined: Fri Oct 07, 2005 02:17 PM
Re: Web Services
Posted: Tue Jan 21, 2014 04:51 PM

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,&quot;&amp;#209;&quot;, &quot;Ñ&quot;)
                    cN := STRTRAN(cN,&quot;&amp;#xD1;&quot;, &quot;Ñ&quot;)
                    cN := STRTRAN(cN,&quot;&amp;#193;&quot;, &quot;Á&quot;)
                    cN := STRTRAN(cN,&quot;&amp;#201;&quot;, &quot;É&quot;)
                    cN := STRTRAN(cN,&quot;&amp;#205;&quot;, &quot;Í&quot;)
                    cN := STRTRAN(cN,&quot;&amp;#211;&quot;, &quot;Ó&quot;)
                    cN := STRTRAN(cN,&quot;&amp;#218;&quot;, &quot;Ú&quot;)
                    cN := STRTRAN(cN,&quot;&amp;#xC1;&quot;, &quot;Á&quot;)
                    cN := STRTRAN(cN,&quot;&amp;#xC9;&quot;, &quot;É&quot;)
                    cN := STRTRAN(cN,&quot;&amp;#xCD;&quot;, &quot;Í&quot;)
                    cN := STRTRAN(cN,&quot;&amp;#xD3;&quot;, &quot;Ó&quot;)
                    cN := STRTRAN(cN,&quot;&amp;#xDA;&quot;, &quot;Ú&quot;)
Enrrique Vertiz Pitta

Lima-Peru

xHb 1.23.1026X, Fwh 25.01, BCC74, MySQL 8.0.X, SQLLIB 1.9m
Posts: 3
Joined: Sat May 23, 2015 05:43 PM
Re: Web Services
Posted: Mon May 25, 2015 09:52 PM

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

Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Web Services
Posted: Tue May 26, 2015 01:37 AM
Code (fw): Select all Collapse
#include "dll.ch"
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 492
Joined: Wed Nov 16, 2005 12:03 PM
Re: Web Services
Posted: Wed Jun 03, 2015 09:41 PM
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 (fw): Select all Collapse
 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
Posts: 492
Joined: Wed Nov 16, 2005 12:03 PM
Re: Web Services
Posted: Thu Jun 04, 2015 09:41 AM

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.

Posts: 467
Joined: Fri Dec 09, 2005 12:41 AM
Re: Web Services
Posted: Tue Jun 19, 2018 05:08 PM

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

Posts: 1
Joined: Fri Jul 31, 2020 08:28 PM
Re: Web Services
Posted: Fri Aug 14, 2020 10:03 PM

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

Posts: 42
Joined: Thu Jul 13, 2006 12:20 AM
Re: Web Services
Posted: Fri Aug 21, 2020 05:14 PM

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.

Posts: 1
Joined: Tue May 18, 2021 12:33 AM
Re: Web Services
Posted: Tue May 18, 2021 11:46 PM

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

Posts: 37
Joined: Tue May 12, 2009 08:45 PM
Re: Web Services
Posted: Sat May 22, 2021 06:13 AM

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

Posts: 400
Joined: Fri May 11, 2007 08:20 PM
Re: Web Services
Posted: Sat May 22, 2021 06:07 PM

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?

fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql

Continue the discussion