Consulta optante do simples online
Enviado: 24 Jun 2016 13:51
Oi Toledo, se vc quiser compartilhar o que já tem, talvez possamos ajudar o finalizar a montagem do xml da NFe.
Código: Selecionar todos
// -------------------------------------------------------------------------- //
// Arquivo.....: ConsultaNfe.prg
// Criado em...: 02/05/2016 as 10:41:18
// Projeto.....: Consulta Simples
// Programador.: Daniel Denobie - denobie@hotmail.com
// Alterado por: Daniel Segura Fernandes ciacpd@hotmail.com
// Objetivo....: Compatibilizar com FiveWin xHarbour
// -------------------------------------------------------------------------- //
#include "FiveWin.ch"
#include "directry.ch"
#include "Fileio.ch"
#include "tip.ch"
#define _MSXML2_ServerXMLHTTP 'MSXML2.ServerXMLHTTP.5.0'
// -------------------------------------------------------------------------- //
FUNCTION Busca_NFe_Portal()
Private cUrl := "http://www.nfe.fazenda.gov.br/portal/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8="
Private cUrl1:= "http://www.nfe.fazenda.gov.br/portal/consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8="
Private cUrl2:= 'http://www.nfe.fazenda.gov.br/portal/consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8%3d'
Private oImgCaptcha, oCaptcha, cCaptcha:=space(6), oChave, cChave:=space(44),;
cStringCookie, cViewState, cViewStateGenerator, cEeventValidation, cHiddenToken, cCodigo, cHtml
Private cHiddenSom, oDlg, oServer
Consulta()
Define Dialog oDlg Resource 'GERNFE'
Redefine Get oCaptcha Var cCaptcha ID 4001 Of oDlg
Redefine Get oChave Var cChave ID 4002 Of oDlg
Redefine Image oImgCaptcha FILENAME "captcha.png" ID 4004 Of oDlg Adjust
Redefine BtnBmp ID 4005 Resource 'REFRESH16' Of oDlg Action Captcha(cHtml) //ImageNFE( oDlg, cCaptcha )
Redefine Button ID 4003 Of oDlg Action ( oDlg:End() )
oDlg:lHelpIcon:=.f.
Activate Dialog oDlg Centered On Init Captcha(cHtml) // ImageNFE( oDlg, cCaptcha )
If ! Consulta1(cChave, cCaptcha)
nmsgbox('Ocorreu um ERRO na consulta.', xSWH+' Informa.')
return .f.
Else
nmsgbox('Consulta realizada com sucesso.', xSWH+' Informa.')
EndIf
Return .t.
// -------------------------------------------------------------------------- //
Function Consulta()
mensagem("Criando a conecção com o partal da NFe. Aguarde!!!")
Try
oServer:= CreateObject( _MSXML2_ServerXMLHTTP )
Catch
MsgInfo('Erro na Criação do Serviço', xSWH+' Informa.')
mensagem("")
Return .f.
End
Try
oServer:Open( "GET", cUrl, .f. )
oServer:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
oServer:SetRequestHeader( "Connection", "keep-alive" )
oServer:Send()
oServer:WaitForResponse( 10000 )
Catch
MsgInfo('Erro na Conexão com o Site', xSWH+' Informa.')
mensagem("")
Return .f.
End
cHtml:= oServer:ResponseBody
cStringCookie:= oServer:getResponseHeader("Set-Cookie")
mensagem('')
MemoWrit("html_nfei.txt", cHtml)
nInie := At('id="ctl00_ContentPlaceHolder1_lblMensagemErro">', cHtml) + 47
If nInie > 47
cHtml1 := SubStr( cHtml, nInie)
nFime := At('</span>', cHtml1) - 1
cMsgErro:= SubStr(cHtml, nInie, nFime)
If ! Empty(cMsgErro)
MsgInfo(cMsgErro, 'Erro no Site ' + cUrl)
Return .f.
EndIf
EndIf
nIni := At('id="__VIEWSTATE" value=', cHtml) + 24
cHtml1:= SubStr( cHtml, nIni)
nFim := At('" />', cHtml1) - 1
cViewState:= SubStr(cHtml, nIni, nFim)
nIni1 := At('id="__EVENTVALIDATION" value="', cHtml) + 30
cHtml1:= SubStr( cHtml, nIni1)
nFim1 := At('" />', cHtml1) - 1
cEeventValidation:= SubStr(cHtml, nIni1, nFim1)
nIni2 := At('id="__VIEWSTATEGENERATOR" value="', cHtml) + 33
cHtml1:= SubStr( cHtml, nIni2)
nFim2 := At('" />', cHtml1) - 1
cViewStateGenerator:= SubStr(cHtml, nIni2, nFim2)
nIni3 := At('id="ctl00_ContentPlaceHolder1_token" value="', cHtml) + 44
cHtml1:= SubStr( cHtml, nIni3)
nFim3 := At('" />', cHtml1) - 1
cHiddenToken:= SubStr(cHtml, nIni3, nFim3)
nIni4 := At('id="ctl00_ContentPlaceHolder1_captchaSom" value="', cHtml) + 49
cHtml1:= SubStr( cHtml, nIni4)
nFim4 := At('" />', cHtml1) - 1
cHiddenSom:= SubStr(cHtml, nIni4, nFim4)
memowrit( 'html_nfef.txt' , cHtml )
If ! Captcha(cHtml)
Return .F.
EndIf
Return .t.
// -------------------------------------------------------------------------- //
Function Captcha(cHtml)
nIni := At('data:image/png;base64,', cHtml) + 22
cHtml1:= SubStr(cHtml, nIni)
nFim := At('" style="border-width:0px;" />', cHtml1) - 2
cFile:= SubStr(cHtml, nIni, nFim)
txt_file:=fcreate("captcha.png", 0)
If (!(ferror() = 0))
MsgInfo("Erro de criacao do arquivo de imagem " + Str(ferror(), 3, 0))
Return .f.
EndIf
cCodigo:= SubStr(cHtml, nIni, nFim)
If Empty(cCodigo)
MsgInfo("Erro de criacao do arquivo de imagem")
Return .f.
EndIf
cDecoded := HB_B64DECODE( cCodigo )
FWrite(txt_file , cDecoded)
FClose(txt_file)
if valtype('oImgCaptcha') == 'O'
cImgCaptcha:='captcha.png'
oImgCaptcha:Hide()
oImgCaptcha:LoadBmp( cImgCaptcha )
oImgCaptcha:Show()
oImgCaptcha:Refresh( .t. )
endif
sysrefresh()
Return .T.
// -------------------------------------------------------------------------- //
Function Consulta1(cChave, cCaptcha)
Local oInternet, cParm, cRet:= cHtml:= ''
If ! DigitoChave(cChave)
Return Nil
EndIf
cParm:= { { "__EVENTARGUMENT", "" },;
{ "__EVENTTARGET", "" },;
{ "__EVENTVALIDATION", cEeventValidation },;
{ "__VIEWSTATE", cviewState },;
{ "__VIEWSTATEGENERATOR", cViewStateGenerator },;
{ "ctl00$ContentPlaceHolder1$btnConsultar", "Continuar" },;
{ "ctl00$ContentPlaceHolder1$captchaSom", cHiddenSom},;
{ "ctl00$ContentPlaceHolder1$token", cHiddenToken },;
{ "ctl00$ContentPlaceHolder1$txtCaptcha", cCaptcha },;
{ "ctl00$ContentPlaceHolder1$txtChaveAcessoCompleta", cChave },;
{ "ctl00$txtPalavraChave", "" },;
{ "hiddenInputToUpdateATBuffer_CommonToolkitScripts", "1"}}
Try
oInternet:= TIPClientHTTP():New(cUrl, .f.)
Catch
MsgInfo('Erro na Criação do Serviço')
Return .f.
End
oInternet:SetCookie(cStringCookie)
If oInternet:Open()
If oInternet:POST(cParm)
cRet:=oInternet:ReadAll()
Else
msgInfo('Erro no Post ' + cUrl , xSWH+' Informa.')
Return .F.
EndIf
Else
msgInfo('Erro na Conexão', xSWH+' Informa.')
Return .f.
EndIf
oInternet:Close()
If At('id="ctl00_ContentPlaceHolder1_bltMensagensErro" class="listaErro">', cRet) > 0
cPart:= Substr(cRet, (At('id="ctl00_ContentPlaceHolder1_bltMensagensErro" class="listaErro">', cRet) + 66))
cPart:= Substr(cPart, (At('<li>', cPart) + 4))
MsgInfo(Troca_Acento(SubStr(cPart, 1, (At('</li>', cPart) - 1))))
Return .f.
EndIf
Try
oInternet:= TIPClientHTTP():New(cUrl1, .f.)
oInternet:nConnTimeout:= 10000
Catch
MsgInfo('Erro na Criação do Serviço', xSWH+' Informa.')
Return .f.
End
oInternet:SetCookie(cStringCookie)
If oInternet:Open()
cHtml:=oInternet:ReadAll()
cStringCookie:= oInternet:GetCookies()
Else
msgInfo('Erro na Conexão')
Return .f.
EndIf
oInternet:Close()
MemoWrit('result.htm', cHtml, .f.)
If At('id="ctl00_ContentPlaceHolder1_lblResultadoConsulta">', cHtml) > 0
cPart:= Substr(cHtml, (At('id="ctl00_ContentPlaceHolder1_lblResultadoConsulta">', cHtml) + 52))
MsgInfo(SubStr(cPart, 1, (At('</span>', cPart) - 1)))
Return .f.
EndIf
//eleminas partes não usadas
If ! Empty(cHtml)
nIni1 := At('<html><link ', cHtml)
cParte := SubStr(cHtml, nIni1)
nIni1 := At('<div id="ctl00_ContentPlaceHolder1_divBotoesConsulta"', cParte)
cParte1:= SubStr(cParte, 1, nIni1 - 1)
nFim1 := At('</form>', cParte1)
cFile := SubStr(cParte1, nFim1)
MemoWrit('resulta.htm', cFile, .f.)
Else
Return .f.
EndIf
sysrefresh()
Shellexecute( , "open" , 'resulta.htm' )
Return .T.
// -------------------------------------------------------------------------- //
Function DigitoChave(CodigoChave)
Local indice:= '4329876543298765432987654329876543298765432'
Local digito
nSoma:= 0
For contador:= 1 to 43
nSoma+= (Val(SubStr(CodigoChave, contador, 1)) * Val(SubStr(indice, contador, 1)))
Next
digito:= (nSoma % 11)
If digito == 0 .Or. digito == 1
digito := 0
Else
digito := (11 - digito)
EndIf
If SubStr(CodigoChave, 44, 1) != LTrim(Str(digito, 1))
MsgStop('Código da Chave Errado....', 'Aviso do Sistema')
Return .f.
EndIf
Return .t.
// -------------------------------------------------------------------------- //
Function Troca_Acento(cTexto)
cTexto := StrTran( cTexto, "ó", "ó" )
cTexto := StrTran( cTexto, "á", "á" )
Return cTexto
// -------------------------------------------------------------------------- //
Já baixei a segurança, consigo acessar internet n servidor, mas nao abre a conexão via Classe...'Erro na Conexão com o Site'
Código: Selecionar todos
* Conteudo elementos da Matriz = {VALOR_TAG,TAG,TAG_PAI,Elemento_Final_TAG_PAI,LABEL_HTML,TAM_LABEL}
AADD(aTransp,{{"","modFrete","transp",14,"Modalidade do Frete",1},; //1-
{"","CNPJ","transporta",8,"CNPJ",0},; //2-
{"","CPF","",0,"CPF",0},; //3-
{"","xNome","",0,"Razão Social / Nome",0},; //4-
{"","IE","",0,"Inscrição Estadual",0},; //5-
{"","xEnder","",0,"Endereço Completo",0},; //6-
{"","xMun","",0,"Município",0},; //7-
{"","UF","",0,"UF",0},; //8-
{"","placa","veicTransp",7,"Placa",0},; //9- ADICIONEI ESSAS 2 LINHAS
{"","UF","",0,"UF",0},; //9- MAS NAO RESOLVEU
{"","qVol","vol",14,"Quantidade",0},; //9-
{"","esp","",0,"Espécie",0},; //10-
{"","marca","",0,"Marca dos Volumes",0},; //11-
{"","nVol","",0,"Volume",0},; //12-
{"","pesoL","",0,"Peso Líquido",0},; //13-
{"","pesoB","",0,"Peso Bruto",0}}) //14-
Código: Selecionar todos
* Conteudo elementos da Matriz = {VALOR_TAG,TAG,TAG_PAI,Elemento_Final_TAG_PAI,LABEL_HTML,TAM_LABEL}
AADD(aTransp,{{"","modFrete","transp",17,"Modalidade do Frete",1},; //1-
{"","CNPJ","transporta",8,"CNPJ",0},; //2-
{"","CPF","",0,"CPF",0},; //3-
{"","xNome","",0,"Razão Social / Nome",0},; //4-
{"","IE","",0,"Inscrição Estadual",0},; //5-
{"","xEnder","",0,"Endereço Completo",0},; //6-
{"","xMun","",0,"Município",0},; //7-
{"","UF","",0,"UF",0},; //8-
{"",'placa','veicTransp',11,'Placa',0},; //9-
{"","UF","",0,"UF",0},; //10-
{"","RNTC","",0,"RNTC",0},; //11-
{"","qVol","vol",17,"Quantidade",0},; //12-
{"","esp","",0,"Espécie",0},; //13-
{"","marca","",0,"Marca dos Volumes",0},; //14-
{"","nVol","",0,"Volume",0},; //15-
{"","pesoL","",0,"Peso Líquido",0},; //16-
{"","pesoB","",0,"Peso Bruto",0}}) //17-