Alain da Silva Posted March 21, 2014 Report Share Posted March 21, 2014 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" //----------------------------------------------------------------------------------------------------------------------// Quote Link to comment Share on other sites More sharing options...
kapiaba Posted March 21, 2014 Report Share Posted March 21, 2014 Ola, Não precisa da chave de acesso? abs, Quote Link to comment Share on other sites More sharing options...
Alain da Silva Posted March 21, 2014 Author Report Share Posted March 21, 2014 Sim, tem que colocar a chave e o captcha. kapiaba 1 Quote Link to comment Share on other sites More sharing options...
kapiaba Posted March 21, 2014 Report Share Posted March 21, 2014 Isto direto na página ou pode-se informar pelo programa? Quote Link to comment Share on other sites More sharing options...
Alain da Silva Posted March 21, 2014 Author Report Share Posted March 21, 2014 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. kapiaba 1 Quote Link to comment Share on other sites More sharing options...
kapiaba Posted March 21, 2014 Report Share Posted March 21, 2014 Entendi, ai usa-se o colar - copiar, leva a chave até o portal e ele faz o download. Veja com o <Aferra> se ele não melhora a classe para você. Obg. abs. aferra 1 Quote Link to comment Share on other sites More sharing options...
Alain da Silva Posted March 21, 2014 Author Report Share Posted March 21, 2014 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 kapiaba 1 Quote Link to comment Share on other sites More sharing options...
aferra Posted March 21, 2014 Report Share Posted March 21, 2014 copiado... Parabéns pela iniciativa Logo dou noticias.... Quote Link to comment Share on other sites More sharing options...
Alain da Silva Posted March 21, 2014 Author Report Share Posted March 21, 2014 alterando aqui: agora leva a chave: oAct:Navigate( ::cPost ) oAct:SetFocus() WHILE oAct:Busy SysWait(.2) ENDDO oActdo:=oAct:Document() oActdo:All:Item("ctl00$ContentPlaceHolder1$txtChaveAcessoCompleta",0):Value:=cchave falta a imagem agora. abs Quote Link to comment Share on other sites More sharing options...
SAOliveira Posted March 21, 2014 Report Share Posted March 21, 2014 Ferrou o code. Esta Click() faz o que ? Quote Link to comment Share on other sites More sharing options...
FiveWinBr Posted March 21, 2014 Report Share Posted March 21, 2014 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. Quote Link to comment Share on other sites More sharing options...
FiveWinBr Posted March 21, 2014 Report Share Posted March 21, 2014 Simula o CLICK em determinado objeto dentro do 'browse', no caso acima o botao consultar. Ferrou o code. Esta Click() faz o que ? Quote Link to comment Share on other sites More sharing options...
Alain da Silva Posted March 21, 2014 Author Report Share Posted March 21, 2014 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 Quote Link to comment Share on other sites More sharing options...
Alain da Silva Posted March 21, 2014 Author Report Share Posted March 21, 2014 Simula o CLICK em determinado objeto dentro do 'browse', no caso acima o botao consultar. o botão que esta clicando é "DOWNLOAD DO DOCUMENTO" isso depois que ele encontra a nfe. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.