aokisantos got a reaction from
frkiko in Alguem já usou as DLL do FSIST para baixar xml
January 28, 2016
Espero que possa ajudar os amigos do forum, como disse o suporte do Fernando é muito bom, vale muito a pena comprar a DLL.
#include 'fivewin.ch'
#include 'hbdll.ch'
static s_hDLL, s_cSistema, s_cTituloMensagem
/******************************************************************************/
procedure DownloadNFe( cChave, cPasta, cSerie )
local oDialog, oIcone, oFonte, hInput := HB_Hash()
local cCaptcha := Space( 6 )
local lSemParametros := Empty( PCount() )
if lSemParametros
cChave := Space( 44 )
cPasta := m->cDiretorioXML
cSerie := m->cCertificado
endif
define font oFonte name 'Arial' size 6, 16 bold
define icon oIcone resource 'MAINSG'
define dialog oDialog title 'Download XML - NFe' from 0, 0 to 164, 565 pixel font oFonte icon oIcone
@ 7, 112 say 'Chave:' of oDialog pixel
@ 34, 112 say 'Captcha:' of oDialog pixel
@ 16, 112 get hInput['Chave'] var cChave of oDialog pixel size 165, 13 picture '@9' Valid ValidaChaveConsulta( cChave )
@ 43, 112 get hInput['Captcha'] var cCaptcha of oDialog pixel size 34, 13 picture '@!'
@ 8, 4 image hInput['Imagem'] of oDialog pixel size 104, 48 adjust
@ 64, 174 button '&Baixar' of oDialog pixel size 45, 12 action XmlDownload( hInput, cPasta, cSerie, oDialog, lSemParametros )
@ 64, 226 button '&Sair' of oDialog pixel size 45, 12 action oDialog:End() cancel
@ 64, 4 button '&Atualizar Captcha' of oDialog pixel size 64, 12 action AtualizaCaptcha( hInput, oDialog )
oDialog:lHelpIcon := .f.
activate dialog oDialog centered on init ( IIf( lSemParametros,, hInput['Chave']:disable() ), ;
AtualizaCaptcha( hInput, oDialog ) )
oIcone:end()
oFonte:end()
return
/******************************************************************************/
static function ValidaChaveConsulta( cChave )
/*
*/
if !ValidaChaveDaNFE( cChave )
return .f.
endif
if !ValidaDVNfe(cChave)
return(.f.)
endif
return(.t.)
/******************************************************************************/
function CarregaDLLDownloadNFe( cSistema )
local oPulsante
if s_cTituloMensagem == nil
if HB_IsString( cSistema )
s_cSistema := cSistema
s_cTituloMensagem := cSistema
else
s_cTituloMensagem := 'Aviso do Sistema'
endif
endif
if s_hDLL == nil
if !File( 'BaixarXMLNFe.dll' )
MsgStop( 'Arquivo não encontrado: BaixarXMLNFe.dll' + CRLF + 'Verifique!', s_cTituloMensagem )
return .f.
endif
oPulsante := TPul():new( 'Aguarde.' + CRLF + 'Carregando e registrando DLL...' )
s_hDLL := LoadLibrary( 'BaixarXMLNFe.dll' )
DllRegistra()
DllLicenca( "LICENSA FERNANDO" ) // Fornecido por: Fernando (fsist.com.br)
oPulsante:end()
endif
return .t.
/******************************************************************************/
procedure SetProxyDownloadNFe( lProxy, cIP, nPorta, cUsuario, cSenha )
if lProxy
Proxy( cIP, nPorta, cUsuario, cSenha )
else
Proxy( '', 0, '', '' )
endif
return
/******************************************************************************/
procedure FinalizaDLLDownloadNFe()
if !Empty( s_hDLL )
FreeLib32( s_hDLL )
s_hDLL := nil
endif
return
/******************************************************************************/
static procedure XmlDownload( hInput, cPasta, cSerie, oDialog, lSemParametros )
local cChave := AllTrim( hInput['Chave' ]:value() )
local cCaptcha := AllTrim( hInput['Captcha']:value() )
local cArquivoXML := cPasta + '\' + cChave + '.xml'
local bDownload, nRetorno, nErro, cErro
if Len( cChave ) < 44
MsgStop( 'Chave tem que ter 44 digitos!', s_cTituloMensagem )
hInput['Chave']:setFocus()
return
endif
if Len( cCaptcha ) < 6
MsgStop( 'Favor informar o captcha corretamente!', s_cTituloMensagem )
hInput['Captcha']:setFocus()
return
endif
if Empty( cSerie )
bDownload := { || nRetorno := BaixarXMLNFeSemCert( cChave, cCaptcha, cArquivoXML ) }
else
bDownload := { || nRetorno := BaixarXMLNFeComCert( cChave, cCaptcha, cArquivoXML ) }
endif
SetCertificadoDigital( cSerie )
MsgRun( 'Aguarde! Realizando Download do XML...', s_cSistema, bDownload )
if nRetorno == 1
MsgInfo( 'Download realizado com sucesso! Arquivo gerado:' + CRLF + cArquivoXML, ;
'NF-e ' + IIf( Empty( cSerie ), 'sem', 'com' ) + ' certificado digital' )
if lSemParametros
AtualizaCaptcha( hInput, oDialog )
hInput['Chave' ]:cText( Space( 44 ) )
hInput['Captcha']:cText( Space( 6 ) )
hInput['Chave' ]:setFocus()
else
oDialog:end()
endif
else
nErro := MsgCode()
do case
case nErro == 1
cErro := 'É necessário digitar a chave da nfe.'
case nErro == 2
cErro := 'É necessário digitar o captcha.'
case nErro == 3
cErro := 'Código da Imagem inválido. Tente novamente.'
case nErro == 4
cErro := 'NF-e INEXISTENTE na base nacional.'
otherwise
cErro := 'Desconhecido'
endcase
MsgStop( 'Não foi possível realizar o download do XML!' + CRLF + ;
'Erro ' + AllTrim( Str( nErro ) ) + ': ' + cErro, s_cTituloMensagem )
AtualizaCaptcha( hInput, oDialog )
hInput['Captcha']:cText( Space( 6 ) )
hInput['Captcha']:setFocus()
hInput['Captcha']:setPos( 1 )
endif
return
/******************************************************************************/
static procedure AtualizaCaptcha( hInput, oDialog )
local nRetorno
MsgRun( 'Aguarde! Atualizando Captcha...', s_cSistema, { || nRetorno := Captcha( 'Captcha.jpg' ) } )
if nRetorno == 0 // retorna 1 ou 0, 1 é ok
MsgStop( 'Não foi possível carregar o captcha!', s_cTituloMensagem )
oDialog:end()
else
hInput['Imagem']:loadImage( , 'Captcha.jpg' )
hInput['Imagem']:refresh()
endif
return
/******************************************************************************/
DLL32 FUNCTION Captcha(SalvarEm AS STRING) AS LONG PASCAL LIB 'BaixarXMLNFe.dll'
DLL32 FUNCTION BaixarXMLNFeSemCert(Chave AS STRING, Captcha AS STRING, SalvarEm AS STRING) AS LONG PASCAL LIB 'BaixarXMLNFe.dll'
DLL32 FUNCTION BaixarXMLNFeComCert(Chave AS STRING, Captcha AS STRING, SalvarEm AS STRING) AS LONG PASCAL LIB 'BaixarXMLNFe.dll'
DLL32 FUNCTION GetCertificadoDigital() AS LONG PASCAL LIB 'BaixarXMLNFe.dll'
DLL32 FUNCTION SetCertificadoDigital(Cert AS STRING) AS LONG PASCAL LIB 'BaixarXMLNFe.dll'
DLL32 FUNCTION MsgCode() AS LONG PASCAL LIB 'BaixarXMLNFe.dll'
DLL32 FUNCTION DLLRegistra() AS LONG PASCAL LIB 'BaixarXMLNFe.dll'
DLL32 FUNCTION DLLLicenca(Chave AS STRING) AS LONG PASCAL LIB 'BaixarXMLNFe.dll'
DLL32 FUNCTION Proxy(Host AS STRING, Port AS LONG, User AS STRING, Pass AS STRING) AS LONG PASCAL LIB 'BaixarXMLNFe.dll'