Web Services

Post Reply
User avatar
ralph
Posts: 82
Joined: Fri Nov 18, 2005 11:15 pm
Location: Lima - PERU
Been thanked: 1 time

Web Services

Post 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


 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
MGA
Posts: 1258
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá
Contact:

Re: Web Services

Post by MGA »

muito obrigado Ralph.
ubiratanmga@gmail.com

FWH24.04
BCC7.3
HARBOUR3.2
xMate
Pelles´C
TDolphin
User avatar
Antonio Linares
Site Admin
Posts: 42561
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 35 times
Been thanked: 80 times
Contact:

Re: Web Services

Post by Antonio Linares »

Ralph,

Muchas gracias por compartirlo con todos nosotros :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
csincuir
Posts: 415
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala
Has thanked: 3 times
Been thanked: 2 times
Contact:

Re: Web Services

Post 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


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.
Enrrique Vertiz
Posts: 552
Joined: Fri Oct 07, 2005 2:17 pm
Location: Lima - Peru
Been thanked: 3 times
Contact:

Re: Web Services

Post 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;", "Ú")
Enrrique Vertiz Pitta
Lima-Peru
xHb 1.23.1026X, Fwh 24.09, BCC74, MySQL 8.0.X, SQLLIB 1.9m
yampichu
Posts: 3
Joined: Sat May 23, 2015 5:43 pm

Re: Web Services

Post 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
User avatar
carlos vargas
Posts: 1721
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Web Services

Post by carlos vargas »

Code: Select all | Expand

#include "dll.ch"
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
jnavas
Posts: 482
Joined: Wed Nov 16, 2005 12:03 pm
Location: Caracas - Venezuela
Been thanked: 2 times
Contact:

Re: Web Services

Post 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


 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
User avatar
jnavas
Posts: 482
Joined: Wed Nov 16, 2005 12:03 pm
Location: Caracas - Venezuela
Been thanked: 2 times
Contact:

Re: Web Services

Post 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.
User avatar
lubin
Posts: 451
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru
Contact:

Re: Web Services

Post 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
kerly
Posts: 1
Joined: Fri Jul 31, 2020 8:28 pm

Re: Web Services

Post 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
cjcardoza
Posts: 37
Joined: Thu Jul 13, 2006 12:20 am
Location: Lima - Peru

Re: Web Services

Post 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.
Educuzco
Posts: 1
Joined: Tue May 18, 2021 12:33 am

Re: Web Services

Post 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
Dioni
Posts: 37
Joined: Tue May 12, 2009 8:45 pm
Location: Lima - Perú

Re: Web Services

Post 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
artu01
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: Web Services

Post 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?
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
Post Reply