function webservicerest(anexo,cfileresponse,metodo_,pdf_xml,urlfinal,urlcompleta)
***********************************************************
local XConsumerKey := cap_iniN('C','WEBMANIA','X-Consumer-Key')
local XConsumerSecret := cap_iniN('C','WEBMANIA','X-Consumer-Secret')
local XAccessToken := cap_iniN('C','WEBMANIA','X-Access-Token')
local XAccessTokenSecret := cap_iniN('C','WEBMANIA','X-Access-Token-Secret')
local Cookie := cap_iniN('C','WEBMANIA','Cookie')
local Response:=""
if !IsConnected()
msgstop('Parece que seu computador está sem internet!'+quebra+quebra+'Módulo NFCe inativo!','NFCe inativo')
return
endif
REQUEST HB_CODEPAGE_UTF8
hb_cdpSelect( "UTF8" )
REQUEST HB_CODEPAGE_PTISO
HB_CDPSelect("PTISO")
Default urlcompleta To ''
waitwindow('Consultando api NFCE... Aguarde!',.t.)
//cTextformato:="d?e="+parameter1+"&id="+parameter2+"&t="+parameter3+"&d="+parameter1 && example for send 4 parameters in method GET
cTextformato:=''
cText := anexo
ctamano=alltrim(str(len(cText),10))
tamano=len(cText)
UsERNAME:= "xxxxxxxx"
PASSWORD:= "xxxxxxxx"
username64:=hb_base64Encode(username)
password64:=hb_base64Encode(":"+password)
mAuthorization:=hb_base64Encode(username+":"+password)
doc = CreateObject( "MSXML2.DOMDocument" )
//ohttp = CreateObject( "MSXML2.XMLHTTP" )
oHTTP := CreateObject( "MSXML2.ServerXMLHTTP.6.0" )
If (Empty( ohttp))
MsgStop( 'Objet Create Error. ' )
Return( .f. )
Endif
// Definir o timeout aqui (exemplo: 1 minutos para receber resposta)
//oHTTP:setTimeouts(120000, 1200000, 1200000, 120000)
if metodo_="POST"
if len(urlcompleta)=0
ohttp:Open( "POST" ,"
https://webmaniabr.com/api/1/nfe/"+urlfinal+"/",.T.)
else
ohttp:Open( "POST" ,urlcompleta,.F.)
endif
ELSEIF metodo_='GET'
if len(urlcompleta)=0
ohttp:Open( "GET" ,"
https://webmaniabr.com/api/1/nfe/"+urlfinal+"/"+cTextformato,.T.)
else
ohttp:Open( "GET" ,urlcompleta,.F.)
endif
ELSEIF metodo_='PUT'
if len(urlcompleta)=0
ohttp:Open( "PUT" ,"
https://webmaniabr.com/api/1/nfe/"+urlfinal+"/"+cTextformato,.T.)
else
ohttp:Open( "PUT" ,urlcompleta,.F.)
endif
ENDIF
ohttp:SetRequestHeader("Cache-Control", "no-cache" )
ohttp:SetRequestHeader("X-Consumer-Key", XConsumerKey )
ohttp:SetRequestHeader("X-Consumer-Secret", XConsumerSecret )
ohttp:SetRequestHeader("X-Access-Token", XAccessToken )
ohttp:SetRequestHeader("X-Access-Token-Secret", XAccessTokenSecret )
//ohttp:SetRequestHeader("Cookie", Cookie )
ohttp:SetRequestHeader("content-length",tamano)
if pdf_xml='PDF'
ohttp:SetRequestHeader("content-type", "application/pdf" )
elseif pdf_xml='JSON'
ohttp:SetRequestHeader("content-type", "application/json" )
elseif pdf_xml='XML'
ohttp:SetRequestHeader("content-type", "text/xml" )
endif
if metodo_="POST"
BEGIN SEQUENCE WITH {|e| NIL}
ohttp:Send(anexo)
RECOVER USING oErr
// Se der erro já no Send (ex.: timeout de conexão), retorne vazio sem quebrar
msgstop('Falhou comunicação com a sefaz, atividade não realizada!','ATENÇÃO')
RETURN
END SEQUENCE
else
BEGIN SEQUENCE WITH {|e| NIL}
ohttp:Send(anexo)
RECOVER USING oErr
// Se der erro já no Send (ex.: timeout de conexão), retorne vazio sem quebrar
msgstop('Falhou comunicação com a sefaz, atividade não realizada!','ATENÇÃO')
RETURN
END SEQUENCE
endif
oHTTP:WaitForResponse( 2000 )
mstatus=ohttp:STATUS
if ohttp:STATUS = 200
response:=ohttp:responseText
else
// response:=ohttp:responseText
MsgStop( "Error: Status "+str(mstatus,10) )
endif
waitwindow()
if (Empty( response ) )
MsgStop( "Erro: Resposta vazia. Status "+str(mstatus,10) )
return
End
//hb_Memowrit( cfileresponse,Response)
SalvaTextoPuro( Response, cfileresponse)
response := hb_memoread(cFileresponse)
nLen:=0
res:={}
o=0
nLen := hb_jsondecode( response, @res )
if nlen=0
// msginfo("No data found")
return
endif
if metodo_="POST"
**** example for response in format json received
// error :=res["error"]
// error := arrumautf8(error)
// hb_memowrit('retorno.txt',error)
ELSEIF metodo_="GET"
**** example for response in format json received
cDocum := response && here receive a string for convert to pdf or xml
IF TYPE('cDocum')="U"
msginfo(description)
ELSE
IF LEN(ALLTRIM(cdocum))=0
msginfo(" XML FILE is empty")
ENDIF
// SalvaTextoPuro( cDocum, 'arquivo.xml')
mdecode:=hb_base64Decode(cDocum) && convert string to pdf or xml
// SalvaTextoPuro( mdecode, 'arquivo2.xml')
// hb_Memowrit("newfile"+'.'+pdf_xml,response)
SalvaTextoPuro( response, "newfile"+'.'+pdf_xml)
// hb_Memowrit("newfile2"+'.'+pdf_xml,cDocum)
ENDIF
else
// msginfo("Metodo Inválido. ---> get o post")
endif
ohttp := NIL
Release ohttp
return response
Eu uso assim, essa função tem bastante sujeira de testes que fiz, mas está funcionando aqui. Espero que ajude.