Página 1 de 1

Exemplo usar REST API

Enviado: 07 Nov 2022 14:49
por Itamar M. Lins Jr.
Olá!
Do forum internacional do Harbour.

Código: Selecionar todos

**************************************************************
cUrl:= "https://palena.sii.cl/cgi_dte/UPL/DTEUpload"
oRestApi:=openRestApi()
IF ! EMPTY(oRestApi)
   cHtml := SendRestApi( oRestApi , cUrl, cEnvioDte, cHeader, cToken )
   Hb_MemoWrit( "EnvioPrueba.xml", cHtml )
ENDIF
Return (cHtml)  //Devuelve respuesta del API ya sea Json o Xml

*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
* FUNCION   : OpenRestApi
* COMENTARIO: Esta Funcion permite enviar los DTE al SII en forma automatica
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------

FUNCTION OpenRestApi

LOCAL oRestApi := ""
LOCAL nTimeOut := 20  //seconds

//Init
BEGIN SEQUENCE WITH {|o| break(o)}
oRestApi := Win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
//                             nResolve         nConnect          nSend               nRecieve
oRestApi:setTimeouts( nTimeout * 1000 , nTimeout * 1000 , nTimeout * 1000 , nTimeout * 1000 )

RECOVER
     MsgStop( "Microsoft XML Core Services (MSXML) 6.0 is not installed."+CRLF+;
          "Download and install MSXML 6.0 from http://msdn.microsoft.com/xml"+CRLF+;
          "before continuing.")
END SEQUENCE


RETURN( oRestApi )


*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
* FUNCION   : SendRestApi
* COMENTARIO: Esta Funcion permite enviar los DTE al SII en forma automatica
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------

FUNC SendRestApi( oRestApi, cUrl , cBody , cRequest, cToken , cMethod )

LOCAL cReturn,cResp

DEFAULT cMethod := "POST" //<- aqui en algunos casos es "GET"

DO EVENTS

BEGIN SEQUENCE WITH {|o| break(o)}

set( _SET_CODEPAGE, 'ESWIN' )
oRestApi:Open( cMethod , cUrl )
        CargaHeader(oRestApi,cToken,cBody)
         oRestApi:Send(cBody) // cBody
IF oRestApi:Status <> 200
BREAK "HTTP status: " + hb_NToS(oRestApi:status) + " "  + oRestApi:statusText
          ELSE
           lEnviado := .T.
ENDIF

cReturn := oRestApi:ResponseBody()
// cResp := oRestApi:ResponseText()

RECOVER USING oErr

cReturn := "!ERROR!" + CRLF + HB_TRANSLATE( IF (ValType(oErr) = 'O', oErr:Description, oErr ), 'ESWIN')
 
END SEQUENCE

 
RETURN cReturn


function CargaHeader(oRestApi,cToken,cBody)
   oRestApi:setRequestHeader("Accept" , "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,application/vnd.ms-powerpoint, application/ms-excel,application/msword, */*") //+ CRLF)
   oRestApi:setRequestHeader("Referer" , "https://www.javsistemas.cl") //+CRLF)
   oRestApi:setRequestHeader("Accept-Language" , "es-cl") //+CRLF)
   oRestApi:setRequestHeader("Content-Type" , "multipart/form-data: boundary=9022632e1130lc4") //+CRLF)
   oRestApi:setRequestHeader("Accept-Encoding" , "gzip, deflate") //+CRLF)
   oRestApi:setRequestHeader("User-Agent" , "Mozilla/4.0 (compatible; PROG 1.0; Windows NT 5.0; YComp 5.0.2.4)") //+CRLF)
   oRestApi:setRequestHeader("Host" , "palena") //+CRLF)
   oRestApi:setRequestHeader("Content-Length" , alltrim(str(len(cBody)))) //+CRLF)
   oRestApi:setRequestHeader("Keep-Alive" , "true") //+CRLF)
   oRestApi:setRequestHeader("Cache-Control" , "no-cache") //+CRLF)
   oRestApi:setRequestHeader("Cookie" , "TOKEN="+alltrim(cToken)) //+CRLF)
Return
Créditos: -> José Santos Arias Vega <jsariasv@gmail.com>

Saudações,
Itamar M. Lins Jr.

Exemplo usar REST API

Enviado: 07 Nov 2022 20:07
por JoséQuintas
Tem aqui no fórum inclusive da API do IFOOD.
Achei que nesse tem muita coisa, inclusive configuração de idioma da Espanha.
Mas não deixa de ser um exemplo.

Exemplo usar REST API

Enviado: 08 Nov 2022 10:10
por Itamar M. Lins Jr.
Olá!
Tem aqui no fórum inclusive da API do IFOOD.
Tem que colocar aqui então com o passo a passo e explicações, para esse "dementado que vos escreve" pq eu acompanho aquela thread e não entendi direito.
Nem essa que postei. Mas sei que um dia irei usar.

Saudações,
Itamar M. Lins Jr.

Exemplo usar REST API

Enviado: 08 Nov 2022 11:47
por JoséQuintas
É basicamente igual do XML, mudando o content-type.
Outras coisas dependem do webservice.

Nessa ele separou em rotinas, o que pode confundir um pouco.