Jump to content
Fivewin Brasil

ClassDownloadXml() - Classe para Download do Xml no Portal Nacional


Alain da Silva

Recommended Posts

Bom dia galera, classe para fazer o download do XML no Portal Nacional. Necessita do Certificado do Cliente.

Abraços.

/*********************************************************
 * Classe original TSintegra
 * Data : 10/02/2011 | 02:36 AM
 * Autor: Lailton Fernando Mariano - <developer@lailton.com.br>


 * Função      : Classe para abrir Download do Xml
 * Data        : 20/03/2014 14:00:00 Por : Alain/Rancharia

 * Como Usar :
	oDownXml:=ClassDownloadXml():New()
	oDownXml:Consulta()
	Return Nil
**********************************************************/

#Include "Fivewin.ch"
//----------------------------------------------------------------------------------------------------------------------//
Function GetDownloadXml(); Retu( ClassDownloadXml():New())
//----------------------------------------------------------------------------------------------------------------------//
Class ClassDownloadXml
	Data nTimeOut  Init 200 // 2 minutos
	Data lDownload, lError, cError, lOk
	Data cUrl,cPost,cView
	Method New() Constructor
	Method Consulta(cChave)
	Method DownloadComplete(oAct)
	Method Clear() INLINE DelUrlCache({::cPost,::cView})
EndClass
//----------------------------------------------------------------------------------------------------------------------//
Method New() Class ClassDownloadXml
Local aUrls
aUrls := {"http://www.nfe.fazenda.gov.br/portal/",;
		 "consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=",;
		 "consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8="}

::cUrl  :=   aUrls[1]
::cPost := ::cUrl+aUrls[2]
::cView := ::cUrl+aUrls[3]
Return Self
//----------------------------------------------------------------------------------------------------------------------//
Method Consulta(cchave) Class ClassDownloadXml
Local oDlg, oAct
Local nTimer
If IsInternet() == .F.
	MsgStop("Sem conexão com a internet !")
	Return {}
Else
	::Clear()
EndIf
::lDownload := .F.
::lError    := .F.
::lOk       := .T.
Define Dialog oDlg From 0,0 To 600,664 Pixel Title "[ Download do Documento Xml - Portal Nacional ] - Necessita do Certificado" //Style WS_CAPTION
oDlg:lHelpIcon:=.F.
Activate Dialog oDlg NoWait Centered
oAct:=TActivex():New(oDlg,"Shell.Explorer",00,0,664,600)
oAct:bOnEvent := {|cEv|If(cEv=="DownloadComplete",::DownloadComplete( oAct ),Nil)}
oAct:Silent   := .f.
oAct:Navigate( ::cPost )
oAct:SetFocus()
*WHILE oAct:Busy
  SysWait(.2)
*ENDDO
oActdo:=oAct:Document()
oActdo:All:Item("ctl00$ContentPlaceHolder1$txtChaveAcessoCompleta",0):Value:=cchave

nTimer:=Seconds()
While !::lDownload
	If !IsWindowVisible( oDlg:hWnd )
		::lDownload := .T.
		::lError    := .T.
		::cError    :=  "Consulta Cancelada !"
	ElseIf !IsInternet()
		::lDownload := .T.
		::lError    := .T.
		::cError    := "Perda de conexao com a internet !"
	ElseIf( Seconds()-nTimer ) >= ::nTimeOut
                If MsgYesNo( "O Processo esta Lento, Deseja Continuar Tentando ?","Confirmação")
                   nTimer:=Seconds()
                Else
		   ::lDownload := .T.
    		   ::lError    := .T.
		   ::cError    := "Tempo limit esgotado !"
                Endif
	EndIf
	SysRefresh()
End
Try
Catch oE
        ::lDownload := .T.
	::lError := .T.
	::cError := "Falha no recebimento dos dados!"
End

oDlg:End()
SysRefresh()
If ::lDownload .and. !::lError
   MsgInfo("Download Executado Com Sucesso!!!","AVISO DE ALERTA")
Else
   MsgStop(::cError,"Atenção")
EndIf
Return {}

//----------------------------------------------------------------------------------------------------------------------//
Method DownloadComplete(oAct) Class ClassDownloadXml
Local cHTTP:= oAct:LocationURL
if ::cview<>chttp;;endif
If ( ::cView == cHTTP )
   IF ::lOk
      ::lOk:=.F.
      MsgRun('Pesquisando Certificado e Executando Processo de Download','Página Encontrada...')
      oact:Document:all:Item("ctl00$ContentPlaceHolder1$btnDownload"):click()
   Else
      ::lDownload :=.T.
   endif
ElseIf SUBS(CHTTP,1,105)=="https://www.nfe.fazenda.gov.br/PORTAL/downloadNFe.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=&a="
      ::cError    := "O CNPJ ou CPF do certificado não está autorizado a fazer o download do documento"
      ::lError    := .T.
      ::lDownload := .T.
EndIf
Return nil
//----------------------------------------------------------------------------------------------------------------------//

Static Function DelUrlCache( aUrl )
Return AEval( aUrl, {|nX,nNum| DeleteUrlCacheEntry( aUrl[nNum] )} )
Return Nil

//----------------------------------------------------------------------------------------------------------------------//

EXIT PROCEDURE SAIR
	PostQuitMessage( 0 )
	__Quit()
Return Nil

//----------------------------------------------------------------------------------------------------------------------//
DLL Static Function DeleteUrlCacheEntry(lpszUrlName AS STRING) AS LONG PASCAL FROM "DeleteUrlCacheEntryA" LIB "wininet.dll"
//----------------------------------------------------------------------------------------------------------------------//

Link to comment
Share on other sites

Deixa eu ver se eu entendi o que vc perguntou.

Você faz a chamada no seu programa:

ex:

MENUITEM "Importar Xml" RESOURCE "DANFE" ACTION DISPARAXML()
Static Function Disparaxml()
oDownXml:=ClassDownloadXml():New()
oDownXml:Consulta()
REturn Nil
Ee abre a pagina no seu programa da consulta da nfe e faz o download do documento(xml) se vc tiver o certificado.
Eu não consegui mandar via programa a chave e o captcha, tem que digitar manualmente.
Link to comment
Share on other sites

Sim, quem melhorar é só postar as alterações. Eu não uso o colar e copiar porque eu uso essa classe com algumas modificações. Essa eu deixei somente a parte do download do xml. A que eu uso eu digito o código e o captcha e ele traz todos os dados da nfe que importo para meu meu programa e depois ele faz automatico o download do xml. Ainda estou melhorando o código, assim que der eu coloco o código inteiro.

Mas quem conseguir mandar a chave e o captha seria ideal.

abs

Link to comment
Share on other sites

Boa tarde,

Esta errado isso aqui:

* Função : Classe para efetuar o Download do Xml no Portal Nacional
* Data : 20/03/2014 14:00:00 Por : Alain/Rancharia

Esta class foi eu quem desenvolvi para fivewin. ao menos coloque o autor correto.

E isso nao faz o download do arquivo, apenas baixa os dados da XML exibida no site, caso queira baixar o arquivo

tera que usar a chave.

Link to comment
Share on other sites

sim lailton, eu comprei de você o código para importar o sintegra. Agora modifiquei para fazer a importação no site do portal nacional puxando os dados para cadastro da nfe e para fazer o download do xml no portal nacional. (baixa o xml sim).

Então fique ai uma correção:

programa sintegra:

Exemplo de uso da class TSintegra
Data : 10/02/2011 | 02:36 AM
Autor: Lailton Fernando Mariano - <developer@lailton.com.br>

* Função : Classe para efetuar o Download do Xml no Portal Nacional
* Data : 20/03/2014 14:00:00 revisado e alterado:Por : Alain/Rancharia

um abraço

agora como falei em cima ja esta mandando a chave, falta fazer a imagem

abs

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...