Otimizando a hbnfe

Projeto hbNFe (Nota Fiscal Eletronica/Danfe) para [x]Harbour

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Otimizando a hbnfe

Mensagem por JoséQuintas »

Como minha consulta de protocolo do PR deu problema, hoje isolei a consulta de protocolo da hbnfe pra tentar simplificar.
Tá funcionando, mas PR só funcionou depois que alterei para RS virtual (hbnfe está de acordo com o indicado, mas não tá funcionando)

Mudanças com relação ao código em nfeconsulta.prg:
- XML mais legível no fonte
- UF de consulta diretamente da chave de acesso
- Não precisa arquivo temporário, nem o tal DOMDocument
- Deixei no fonte as URLs de consulta
- Não tem tratamento de erro
- O fonte contém tudo que precisa pra consulta

Meu objetivo foi só fazer funcionar a consulta, como alternativa à DLL que uso.
Achei que pode interessar pra enxugar a hbnfe.
Obs. Com certeza se não fosse a hbnfe, eu não teria conseguido.

Código: Selecionar todos

Procedure Main

cAmbiente := "1"
cChave := Space(44)
cNomeCertificado := Pad("NOMENOCERTIFICADO",100)

Clear
@ 2, 0 Say "Chave...:" Get cChave 
@ 3, 0 Say "Certificado.:" Get cNomeCertificado
Read
cNomeCertificado := Trim(cNomeCertificado)

If LastKey() == 27
   Cancel
Endif   

cUrlWs := GetUrlWs(cChave)

cXml := ""
cXml += [<?xml version="1.0" encoding="UTF-8"?>]
cXml += [<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">]
cXml +=    [<soap12:Header>]
cXml +=       [<nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2">]
cXml +=          [<cUF>] + Substr(cChave,1,2) + [</cUF>]
cXml +=          [<versaoDados>2.00</versaoDados>]
cXml +=       [</nfeCabecMsg>]
cXml +=    [</soap12:Header>]
cXml +=    [<soap12:Body>]
cXml +=       [<nfeDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2">]
cXml +=          [<consSitNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00">]
cXml +=          [<tpAmb>] + cAmbiente + [</tpAmb>] 
cXml +=          [<xServ>CONSULTAR</xServ>]
cXml +=          [<chNFe>] + cChave + [</chNFe>]
cXml +=          [</consSitNFe>]
cXml +=    [</nfeDadosMsg>]
cXml +=    [</soap12:Body>]
cXml += [</soap12:Envelope>]

cSOAPAction := [http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2]

oServerWS := win_OleCreateObject("MSXML2.ServerXMLHTTP.5.0")
oServerWS:setOption( 3, "CURRENT_USER\MY\" + cNomeCertificado )
oServerWS:open("POST", cUrlWS, .F.)
oServerWS:setRequestHeader("SOAPAction", cSOAPAction)
oServerWS:setRequestHeader("Content-Type", "application/soap+xml; charset=utf-8")
 
oServerWs:Send(cXml)

Do While oServerWS:readyState <> 4
   MilliSec(500)
Enddo
cXmlResp := HB_ANSITOOEM(oServerWS:responseText)
? cXmlResp


Function GetUrlWs(cUf)
Local cUrl

cUf := Substr(cUf,1,2) // dois primeiros digitos da chave
cUrl := ""

Do Case
Case cUf == "SCAN" // SCAN, só anotado
   cUrl := [https://www.scan.fazenda.gov.br/NfeConsulta2/NfeConsulta2.asmx]
Case cUf == "13" // AM  
   cUrl := [https://nfe.sefaz.am.gov.br/services2/services/NfeConsulta2]
Case cUf == "23" // CE
   cUrl := [https://nfe.sefaz.ce.gov.br/nfe2/services/NfeStatusServico2]
Case cUf == "26" // PE
  cUf := [https://nfe.sefaz.pe.gov.br/nfe-service/services/NfeConsulta2]
Case cUf == "29" // BA
   cUrl := [https://nfe.sefaz.ba.gov.br/webservices/nfenw/NfeConsulta2.asmx]
Case cUf == "31"  // MG
   cUrl := [https://nfe.fazenda.mg.gov.br/nfe2/services/NfeConsulta2]
Case cUf == "35" // SP
   cUrl := [https://nfe.fazenda.sp.gov.br/nfeweb/services/nfeconsulta2.asmx]
Case cUf == "50" // MS   
   cUrl := [https://nfe.fazenda.ms.gov.br/producao/services2/NfeConsulta2]
Case cUf == "51" // MT   
   cUrl := [https://nfe.sefaz.mt.gov.br/nfews/v2/services/NfeConsulta2?wsdl]
Case cUf == "52" // GO   
   cUrl := [https://nfe.sefaz.go.gov.br/nfe/services/v2/NfeConsulta2?wsdl]
Case cUf $ "32,21,15,22,24" // ES,MA,PA,PI,RN   
   cUrl := [https://www.sefazvirtual.fazenda.gov.br/NfeStatusServico2/NfeStatusServico2.asmx]
Otherwise 
   cUrl :=  [https://nfe.sefazvirtual.rs.gov.br/ws/NfeConsulta/NfeConsulta2.asmx]
EndCase
  
Return cUrl

José M. C. Quintas
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Otimizando a hbnfe

Mensagem por JoséQuintas »

Novidade quanto ao endereço de PR:
Ontem o endereço que coloquei estava funcionando, retornava ok.
Hoje, o endereço retorna como "nota não cadastrada".
Coloquei de volta o endereço original e voltou a ficar ok.

Conclusão:
PR tem seu endereço próprio, mas quando sai do ar, o sefaz virtual entra no lugar.
E quando o PR volta a funcionar, o virtual simplesmente retorna como nota não cadastrada, pois deixa de atender PR.
Foram quase 3 dias onde PR foi substituído pelo RS.
Pra deixar automático, e não precisar mexer nos fontes, só deixando preparado pra endereços alternativos.
Interessante o trem.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Otimizando a hbnfe

Mensagem por sygecom »

Olá José,
Acho que o ideal seria postar os ajustes direto nos arquivos do projeto, para facilitar para o Fernando fazer o merge e commitar. Vlw.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Otimizando a hbnfe

Mensagem por JoséQuintas »

Postar as novidades do que estou fazendo aqui.
Se alguém puder sugerir as possíveis mudanças na hbnfe...
Não dá pra alterar os fontes originais, porque não vou saber se tudo vai continuar compatível.
E algumas coisas são sugestões, que estou implementando pra mim, e não sei se vai continuar assim até o final.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Otimizando a hbnfe

Mensagem por JoséQuintas »

Fiz hoje, que alguns vão falar que é programa de doido:

Tem a lista de webservices da NFE, e a lista de webservices de CTE.
Usando o copiar/colar, salvei em arquivos do bloco de notas, e montei o programa abaixo, que me gera diretamente um fonte pra embutir no EXE:
Como dá pra perceber.... o conteúdo também poderia ser em arquivo, pra atualizar sem precisar mexer no fonte.

Código: Selecionar todos

Procedure Main

// pega nfe salvo de nfe.fazenda.gov.br

mTexto := MemoRead("webservicesnfe.txt")
mTexto := StrTran(mTexto,Chr(13),"")
mTexto := StrTran(mTexto,"  "," ")
mTextArray := {}
Do While Len(mTexto) > 0
   mLinha := AllTrim(Substr(mTexto,1,At(Chr(10),mTexto+Chr(10))-1))
   mTexto := Substr(mTexto,At(Chr(10),mTexto+Chr(10))+1)
   If " " $ mLinha
      mLinha := Substr(mLinha, At(" ",mLinha)+1)
   Endif
   If " " $ mLinha
      mLinha := Substr(mLinha, At(" ",mLinha)+1)
   Endif
   If "http" $ Lower(mLinha)
      Aadd(mTextArray,mLinha)
   Endif
Enddo

mUfs := { "SCAN", "SEFAZVIRTUAL.RS", "SEFAZVIRTUAL", "AM", "BA", "CE", "GO", "MG", "MS", "MT", "PE", "PR", "SP", "RJ", "RS", "NAOIDENTIFICADO" }
mServicos := { "nfecancelamento", "nfestatusservico", "nfeinutilizacao", "nferecepcao", "nferetrecepcao", "nferecepcaoevento", "cadconsultacadastro", "nfeconsulta", "naoidentificado"  }

mWebServices := {}
For nCont = 1 To Len(mTextArray)
   Aadd( mWebServices, { mTextArray[nCont], "", "" }  )
Next

For nCont = 1 To Len(mWebServices)
   mEndereco := mWebServices[nCont,1]
   mPosicao := 0
   For nCont2 = 1 To Len(mUfs)
      If Lower("." + mUFs[nCont2] + ".") $ mEndereco
         mWebServices[nCont,2] := mUfs[nCont2]
         Exit
      Endif
   Next
   For nCont2 = 1 To Len(mServicos)
      If Lower(mServicos[nCont2]) $ Lower(mEndereco)
         mWebServices[nCont,3] := mServicos[nCont2]
         Exit
      Endif
   Next
Next

// pega cte salvo de cte.fazenda.gov.br

mTexto := MemoRead("webservicescte.txt")
mTexto := StrTran(mTexto,chr(13),"")
mTexto := StrTran(mTexto,"  "," ")
mTextArray := {}
Do While Len(mTexto) > 0
   mLinha := AllTrim(Substr(mTexto,1,At(Chr(10),mTexto+Chr(10))-1))
   mTexto := Substr(mTexto,At(Chr(10),mTexto+Chr(10))+1)
   mUf := Substr(mLinha,1,At(" ",mLinha)-1)
   mLinha := Substr(mLinha,At(" ",mLinha)+1)
   mServico := Lower(Substr(mLinha,1,At(" ",mLinha)-1))
   mLinha := Substr(mLinha,At(" ",mLinha)+1)
   mUrl := mLinha
   If .Not. Empty(mUf) .And. .Not. Empty(mServico) .And. .Not. Empty(mUrl)
      Aadd(mWebServices, { mUrl, mUf, mServico } )
      If aScan(mUFs, mUf) == 0
         Aadd(mUFs, mUf)
      Endif
      If aScan(mServicos,mServico) == 0
         Aadd(mServicos,mServico)
      Endif
   Endif   
Enddo   

For nCont = 1 To Len(mWebServices)
   If mWebServices[nCont,2] == ""
      mWebServices[nCont,2] := "NAOIDENTIFICADO"
   Endif
   If mWebServices[nCont,3] == ""
      mWebServices[nCont,3] := "NAOIDENTIFICADO"
   Endif
Next   

mCrLf := Chr(13) + Chr(10)
mTexto := [Static Function XmlUrlWs()] + mCrLf
mTexto += [Local mTexto] + mCrLf
mTexto += [mTexto := ""] + mCrLf
mTexto += [mTexto += "<webservices>"] + mCrLf
For nCont = 1 To Len(mUfs)
   mUf  := mUfs[nCont]
   mQtd := 0
   For nCont2 = 1 To Len(mWebServices)
      If mWebServices[nCont2,2] == mUf
         mQtd += 1
      Endif
   Next
   If mQtd != 0
      mTexto += [mTexto += "<ufws] + mUf + [>"] + mCrLf
      For nCont2 = 1 To Len(mWebServices)
         For nCont3 = 1 To Len(mServicos)
            mServico := mServicos[nCont3]
            If mWebServices[nCont2,2] == mUf .And. mWebServices[nCont2,3] == mServico
               mTexto += [mTexto += "   <urlws] + mServico + [>] + mWebServices[nCont2,1] + [</urlws] + mServico + [>"] + mCrLf
            Endif
         Next
      Next
      mTexto += [mTexto += "</ufws] + mUf + [>"] + mCrLf
   Endif
Next
mTexto += [mTexto += "</webservices>"] + mCrLf
mTexto += [//HB_MemoWrit("services.url",mTexto)]
mTexto += [Return mTexto]

HB_MemoWrit("lista.txt",mTexto)
O resultado é este:

Código: Selecionar todos

Static Function XmlUrls()
Local mTexto

mTexto := ""
mTexto += "<webservices>"
mTexto += "<ufwsSCAN>"
mTexto += "   <urlwsnferecepcao>https://www.scan.fazenda.gov.br/NfeRecepcao2/NfeRecepcao2.asmx</urlwsnferecepcao>"
mTexto += "   <urlwsnferetrecepcao>https://www.scan.fazenda.gov.br/NfeRetRecepcao2/NfeRetRecepcao2.asmx</urlwsnferetrecepcao>"
mTexto += "   <urlwsnfecancelamento>https://www.scan.fazenda.gov.br/NfeCancelamento2/NfeCancelamento2.asmx</urlwsnfecancelamento>"
mTexto += "   <urlwsnfeinutilizacao>https://www.scan.fazenda.gov.br/NfeInutilizacao2/NfeInutilizacao2.asmx</urlwsnfeinutilizacao>"
mTexto += "   <urlwsnfeconsulta>https://www.scan.fazenda.gov.br/NfeConsulta2/NfeConsulta2.asmx</urlwsnfeconsulta>"
mTexto += "   <urlwsnfestatusservico>https://www.scan.fazenda.gov.br/NfeStatusServico2/NfeStatusServico2.asmx</urlwsnfestatusservico>"
mTexto += "</ufwsSCAN>"
mTexto += "<ufwsSEFAZVIRTUAL.RS>"
mTexto += "   <urlwsnferecepcao>https://nfe.sefazvirtual.rs.gov.br/ws/Nferecepcao/NFeRecepcao2.asmx</urlwsnferecepcao>"
mTexto += "   <urlwsnferetrecepcao>https://nfe.sefazvirtual.rs.gov.br/ws/NfeRetRecepcao/NfeRetRecepcao2.asmx</urlwsnferetrecepcao>"
mTexto += "   <urlwsnfecancelamento>https://nfe.sefazvirtual.rs.gov.br/ws/NfeCancelamento/NfeCancelamento2.asmx</urlwsnfecancelamento>"
mTexto += "   <urlwsnfeinutilizacao>https://nfe.sefazvirtual.rs.gov.br/ws/nfeinutilizacao/nfeinutilizacao2.asmx</urlwsnfeinutilizacao>"
mTexto += "   <urlwsnfeconsulta>https://nfe.sefazvirtual.rs.gov.br/ws/NfeConsulta/NfeConsulta2.asmx</urlwsnfeconsulta>"
mTexto += "   <urlwsnfestatusservico>https://nfe.sefazvirtual.rs.gov.br/ws/NfeStatusServico/NfeStatusServico2.asmx</urlwsnfestatusservico>"
mTexto += "</ufwsSEFAZVIRTUAL.RS>"
mTexto += "<ufwsSEFAZVIRTUAL>"
mTexto += "   <urlwsnferecepcao>https://www.sefazvirtual.fazenda.gov.br/NfeRecepcao2/NfeRecepcao2.asmx</urlwsnferecepcao>"
mTexto += "   <urlwsnferetrecepcao>https://www.sefazvirtual.fazenda.gov.br/NfeRetRecepcao2/NfeRetRecepcao2.asmx</urlwsnferetrecepcao>"
mTexto += "   <urlwsnfecancelamento>https://www.sefazvirtual.fazenda.gov.br/NfeCancelamento2/NfeCancelamento2.asmx</urlwsnfecancelamento>"
mTexto += "   <urlwsnfeinutilizacao>https://www.sefazvirtual.fazenda.gov.br/NfeInutilizacao2/NfeInutilizacao2.asmx</urlwsnfeinutilizacao>"
mTexto += "   <urlwsnfeconsulta>https://www.sefazvirtual.fazenda.gov.br/NfeConsulta2/NfeConsulta2.asmx</urlwsnfeconsulta>"
mTexto += "   <urlwsnfestatusservico>https://www.sefazvirtual.fazenda.gov.br/NfeStatusServico2/NfeStatusServico2.asmx</urlwsnfestatusservico>"
mTexto += "</ufwsSEFAZVIRTUAL>"
mTexto += "<ufwsAM>"
mTexto += "   <urlwsnferecepcao>https://nfe.sefaz.am.gov.br/services2/services/NfeRecepcao2</urlwsnferecepcao>"
mTexto += "   <urlwsnferetrecepcao>https://nfe.sefaz.am.gov.br/services2/services/NfeRetRecepcao2</urlwsnferetrecepcao>"
mTexto += "   <urlwsnfecancelamento>https://nfe.sefaz.am.gov.br/services2/services/NfeCancelamento2</urlwsnfecancelamento>"
mTexto += "   <urlwsnfeinutilizacao>https://nfe.sefaz.am.gov.br/services2/services/NfeInutilizacao2</urlwsnfeinutilizacao>"
mTexto += "   <urlwsnfeconsulta>https://nfe.sefaz.am.gov.br/services2/services/NfeConsulta2</urlwsnfeconsulta>"
mTexto += "   <urlwsnfestatusservico>https://nfe.sefaz.am.gov.br/services2/services/NfeStatusServico2</urlwsnfestatusservico>"
mTexto += "   <urlwscadconsultacadastro>https://nfe.sefaz.am.gov.br/services2/services/cadconsultacadastro2</urlwscadconsultacadastro>"
mTexto += "</ufwsAM>"
mTexto += "<ufwsBA>"
mTexto += "   <urlwsnferecepcao>https://nfe.sefaz.ba.gov.br/webservices/nfenw/NfeRecepcao2.asmx</urlwsnferecepcao>"
mTexto += "   <urlwsnferetrecepcao>https://nfe.sefaz.ba.gov.br/webservices/nfenw/NfeRetRecepcao2.asmx</urlwsnferetrecepcao>"
mTexto += "   <urlwsnfecancelamento>https://nfe.sefaz.ba.gov.br/webservices/nfenw/NfeCancelamento2.asmx</urlwsnfecancelamento>"
mTexto += "   <urlwsnfeinutilizacao>https://nfe.sefaz.ba.gov.br/webservices/nfenw/NfeInutilizacao2.asmx</urlwsnfeinutilizacao>"
mTexto += "   <urlwsnfeconsulta>https://nfe.sefaz.ba.gov.br/webservices/nfenw/NfeConsulta2.asmx</urlwsnfeconsulta>"
mTexto += "   <urlwsnfestatusservico>https://nfe.sefaz.ba.gov.br/webservices/nfenw/NfeStatusServico2.asmx</urlwsnfestatusservico>"
mTexto += "   <urlwscadconsultacadastro>https://nfe.sefaz.ba.gov.br/webservices/nfenw/CadConsultaCadastro2.asmx</urlwscadconsultacadastro>"
mTexto += "   <urlwsnferecepcao>https://nfe.sefaz.ba.gov.br/webservices/sre/nferecepcaoevento.asmx</urlwsnferecepcao>"
mTexto += "</ufwsBA>"
mTexto += "<ufwsCE>"
mTexto += "   <urlwsnferecepcao>https://nfe.sefaz.ce.gov.br/nfe2/services/NfeRecepcao2</urlwsnferecepcao>"
mTexto += "   <urlwsnferetrecepcao>https://nfe.sefaz.ce.gov.br/nfe2/services/NfeRetRecepcao2</urlwsnferetrecepcao>"
mTexto += "   <urlwsnfecancelamento>https://nfe.sefaz.ce.gov.br/nfe2/services/NfeCancelamento2</urlwsnfecancelamento>"
mTexto += "   <urlwsnfeinutilizacao>https://nfe.sefaz.ce.gov.br/nfe2/services/NfeInutilizacao2</urlwsnfeinutilizacao>"
mTexto += "   <urlwsnfeconsulta>https://nfe.sefaz.ce.gov.br/nfe2/services/NfeConsulta2</urlwsnfeconsulta>"
mTexto += "   <urlwsnfestatusservico>https://nfe.sefaz.ce.gov.br/nfe2/services/NfeStatusServico2</urlwsnfestatusservico>"
mTexto += "   <urlwscadconsultacadastro>https://nfe.sefaz.ce.gov.br/nfe2/services/CadConsultaCadastro2</urlwscadconsultacadastro>"
mTexto += "</ufwsCE>"
mTexto += "<ufwsGO>"
mTexto += "   <urlwsnferecepcao>https://nfe.sefaz.go.gov.br/nfe/services/v2/NfeRecepcao2?wsdl</urlwsnferecepcao>"
mTexto += "   <urlwsnferetrecepcao>https://nfe.sefaz.go.gov.br/nfe/services/v2/NfeRetRecepcao2?wsdl</urlwsnferetrecepcao>"
mTexto += "   <urlwsnfecancelamento>https://nfe.sefaz.go.gov.br/nfe/services/v2/NfeCancelamento2?wsdl</urlwsnfecancelamento>"
mTexto += "   <urlwsnfeinutilizacao>https://nfe.sefaz.go.gov.br/nfe/services/v2/NfeInutilizacao2?wsdl</urlwsnfeinutilizacao>"
mTexto += "   <urlwsnfeconsulta>https://nfe.sefaz.go.gov.br/nfe/services/v2/NfeConsulta2?wsdl</urlwsnfeconsulta>"
mTexto += "   <urlwsnfestatusservico>https://nfe.sefaz.go.gov.br/nfe/services/v2/NfeStatusServico2?wsdl</urlwsnfestatusservico>"
mTexto += "   <urlwscadconsultacadastro>https://nfe.sefaz.go.gov.br/nfe/services/v2/CadConsultaCadastro2?wsdl</urlwscadconsultacadastro>"
mTexto += "   <urlwsnferecepcao>https://nfe.sefaz.go.gov.br/nfe/services/v2/NfeRecepcaoEvento?wsdl</urlwsnferecepcao>"
mTexto += "</ufwsGO>"
mTexto += "<ufwsMG>"
mTexto += "   <urlwsnferecepcao>https://nfe.fazenda.mg.gov.br/nfe2/services/NfeRecepcao2</urlwsnferecepcao>"
mTexto += "   <urlwsnferetrecepcao>https://nfe.fazenda.mg.gov.br/nfe2/services/NfeRetRecepcao2</urlwsnferetrecepcao>"
mTexto += "   <urlwsnfecancelamento>https://nfe.fazenda.mg.gov.br/nfe2/services/NfeCancelamento2</urlwsnfecancelamento>"
mTexto += "   <urlwsnfeinutilizacao>https://nfe.fazenda.mg.gov.br/nfe2/services/NfeInutilizacao2</urlwsnfeinutilizacao>"
mTexto += "   <urlwsnfeconsulta>https://nfe.fazenda.mg.gov.br/nfe2/services/NfeConsulta2</urlwsnfeconsulta>"
mTexto += "   <urlwscadconsultacadastro>https://nfe.fazenda.mg.gov.br/nfe2/services/cadconsultacadastro2</urlwscadconsultacadastro>"
mTexto += "   <urlwscterecepcao>https://cte.fazenda.mg.gov.br/cte/services/CteRecepcao</urlwscterecepcao>"
mTexto += "   <urlwscteretrecepcao>https://cte.fazenda.mg.gov.br/cte/services/CteRetRecepcao</urlwscteretrecepcao>"
mTexto += "   <urlwsctecancelamento>https://cte.fazenda.mg.gov.br/cte/services/CteCancelamento</urlwsctecancelamento>"
mTexto += "   <urlwscteinutilizacao>https://cte.fazenda.mg.gov.br/cte/services/CteInutilizacao</urlwscteinutilizacao>"
mTexto += "   <urlwscteconsultaprotocolo>https://cte.fazenda.mg.gov.br/cte/services/CteConsulta</urlwscteconsultaprotocolo>"
mTexto += "   <urlwsctestatusservico>https://cte.fazenda.mg.gov.br/cte/services/CteStatusServico</urlwsctestatusservico>"
mTexto += "</ufwsMG>"
mTexto += "<ufwsMS>"
mTexto += "   <urlwsnferecepcao>https://nfe.fazenda.ms.gov.br/producao/services2/NfeRecepcao2</urlwsnferecepcao>"
mTexto += "   <urlwsnferetrecepcao>https://nfe.fazenda.ms.gov.br/producao/services2/NfeRetRecepcao2</urlwsnferetrecepcao>"
mTexto += "   <urlwsnfecancelamento>https://nfe.fazenda.ms.gov.br/producao/services2/NfeCancelamento2</urlwsnfecancelamento>"
mTexto += "   <urlwsnfeinutilizacao>https://nfe.fazenda.ms.gov.br/producao/services2/NfeInutilizacao2</urlwsnfeinutilizacao>"
mTexto += "   <urlwsnfeconsulta>https://nfe.fazenda.ms.gov.br/producao/services2/NfeConsulta2</urlwsnfeconsulta>"
mTexto += "   <urlwsnfestatusservico>https://nfe.fazenda.ms.gov.br/producao/services2/NfeStatusServico2</urlwsnfestatusservico>"
mTexto += "   <urlwscadconsultacadastro>https://nfe.fazenda.ms.gov.br/producao/services2/CadConsultaCadastro2</urlwscadconsultacadastro>"
mTexto += "   <urlwsnferecepcao>https://nfe.fazenda.ms.gov.br/producao/services2/NfeRecepcaoEvento</urlwsnferecepcao>"
mTexto += "   <urlwscterecepcao>https://producao.cte.ms.gov.br/cteWEB/CteRecepcao.asmx</urlwscterecepcao>"
mTexto += "   <urlwscteretrecepcao>https://producao.cte.ms.gov.br/cteWEB/CteRetRecepcao.asmx</urlwscteretrecepcao>"
mTexto += "   <urlwsctecancelamento>https://producao.cte.ms.gov.br/cteWEB/CteCancelamento.asmx</urlwsctecancelamento>"
mTexto += "   <urlwscteinutilizacao>https://producao.cte.ms.gov.br/cteWEB/CteInutilizacao.asmx</urlwscteinutilizacao>"
mTexto += "   <urlwscteconsultaprotocolo>https://producao.cte.ms.gov.br/cteWEB/CteConsulta.asmx</urlwscteconsultaprotocolo>"
mTexto += "   <urlwsctestatusservico>https://producao.cte.ms.gov.br/cteWEB/CteStatusServico.asmx</urlwsctestatusservico>"
mTexto += "   <urlwscteconsultacadastro>https://producao.cte.ms.gov.br/cteWEB/CadConsultaCadastro.asmx</urlwscteconsultacadastro>"
mTexto += "</ufwsMS>"
mTexto += "<ufwsMT>"
mTexto += "   <urlwsnferecepcao>https://nfe.sefaz.mt.gov.br/nfews/v2/services/NfeRecepcao2?wsdl</urlwsnferecepcao>"
mTexto += "   <urlwsnferetrecepcao>https://nfe.sefaz.mt.gov.br/nfews/v2/services/NfeRetRecepcao2?wsdl</urlwsnferetrecepcao>"
mTexto += "   <urlwsnfecancelamento>https://nfe.sefaz.mt.gov.br/nfews/v2/services/NfeCancelamento2?wsdl</urlwsnfecancelamento>"
mTexto += "   <urlwsnfeinutilizacao>https://nfe.sefaz.mt.gov.br/nfews/v2/services/NfeInutilizacao2?wsdl</urlwsnfeinutilizacao>"
mTexto += "   <urlwsnfeconsulta>https://nfe.sefaz.mt.gov.br/nfews/v2/services/NfeConsulta2?wsdl</urlwsnfeconsulta>"
mTexto += "   <urlwsnfestatusservico>https://nfe.sefaz.mt.gov.br/nfews/v2/services/NfeStatusServico2?wsdl</urlwsnfestatusservico>"
mTexto += "   <urlwscadconsultacadastro>https://nfe.sefaz.mt.gov.br/nfews/CadConsultaCadastro</urlwscadconsultacadastro>"
mTexto += "   <urlwscterecepcao>https://cte.sefaz.mt.gov.br/ctews/services/CteRecepcao</urlwscterecepcao>"
mTexto += "   <urlwscteretrecepcao>https://cte.sefaz.mt.gov.br/ctews/services/CteRetRecepcao</urlwscteretrecepcao>"
mTexto += "   <urlwsctecancelamento>https://cte.sefaz.mt.gov.br/ctews/services/CteCancelamento</urlwsctecancelamento>"
mTexto += "   <urlwscteinutilizacao>https://cte.sefaz.mt.gov.br/ctews/services/CteInutilizacao</urlwscteinutilizacao>"
mTexto += "   <urlwscteconsultaprotocolo>https://cte.sefaz.mt.gov.br/ctews/services/CteConsulta</urlwscteconsultaprotocolo>"
mTexto += "   <urlwsctestatusservico>https://cte.sefaz.mt.gov.br/ctews/services/CteStatusServico</urlwsctestatusservico>"
mTexto += "</ufwsMT>"
mTexto += "<ufwsPE>"
mTexto += "   <urlwsnferecepcao>https://nfe.sefaz.pe.gov.br/nfe-service/services/NfeRecepcao2</urlwsnferecepcao>"
mTexto += "   <urlwsnferetrecepcao>https://nfe.sefaz.pe.gov.br/nfe-service/services/NfeRetRecepcao2</urlwsnferetrecepcao>"
mTexto += "   <urlwsnfecancelamento>https://nfe.sefaz.pe.gov.br/nfe-service/services/NfeCancelamento2</urlwsnfecancelamento>"
mTexto += "   <urlwsnfeinutilizacao>https://nfe.sefaz.pe.gov.br/nfe-service/services/NfeInutilizacao2</urlwsnfeinutilizacao>"
mTexto += "   <urlwsnfeconsulta>https://nfe.sefaz.pe.gov.br/nfe-service/services/NfeConsulta2</urlwsnfeconsulta>"
mTexto += "   <urlwsnfestatusservico>https://nfe.sefaz.pe.gov.br/nfe-service/services/NfeStatusServico2</urlwsnfestatusservico>"
mTexto += "   <urlwscadconsultacadastro>https://nfe.sefaz.pe.gov.br/nfe-service/services/CadConsultaCadastro2</urlwscadconsultacadastro>"
mTexto += "</ufwsPE>"
mTexto += "<ufwsPR>"
mTexto += "   <urlwsnferecepcao>https://nfe2.fazenda.pr.gov.br/nfe/NFeRecepcao2?wsdl</urlwsnferecepcao>"
mTexto += "   <urlwsnferetrecepcao>https://nfe2.fazenda.pr.gov.br/nfe/NFeRetRecepcao2?wsdl</urlwsnferetrecepcao>"
mTexto += "   <urlwsnfecancelamento>https://nfe2.fazenda.pr.gov.br/nfe/NFeCancelamento2?wsdl</urlwsnfecancelamento>"
mTexto += "   <urlwsnfeinutilizacao>https://nfe2.fazenda.pr.gov.br/nfe/NFeInutilizacao2?wsdl</urlwsnfeinutilizacao>"
mTexto += "   <urlwsnfeconsulta>https://nfe2.fazenda.pr.gov.br/nfe/NFeConsulta2?wsdl</urlwsnfeconsulta>"
mTexto += "   <urlwsnfestatusservico>https://nfe2.fazenda.pr.gov.br/nfe/NFeStatusServico2?wsdl</urlwsnfestatusservico>"
mTexto += "</ufwsPR>"
mTexto += "<ufwsSP>"
mTexto += "   <urlwsnferecepcao>https://nfe.fazenda.sp.gov.br/nfeweb/services/nferecepcao2.asmx</urlwsnferecepcao>"
mTexto += "   <urlwsnferetrecepcao>https://nfe.fazenda.sp.gov.br/nfeweb/services/nferetrecepcao2.asmx</urlwsnferetrecepcao>"
mTexto += "   <urlwsnfecancelamento>https://nfe.fazenda.sp.gov.br/nfeweb/services/nfecancelamento2.asmx</urlwsnfecancelamento>"
mTexto += "   <urlwsnfeinutilizacao>https://nfe.fazenda.sp.gov.br/nfeweb/services/nfeinutilizacao2.asmx</urlwsnfeinutilizacao>"
mTexto += "   <urlwsnfeconsulta>https://nfe.fazenda.sp.gov.br/nfeweb/services/nfeconsulta2.asmx</urlwsnfeconsulta>"
mTexto += "   <urlwsnfestatusservico>https://nfe.fazenda.sp.gov.br/nfeweb/services/nfestatusservico2.asmx</urlwsnfestatusservico>"
mTexto += "   <urlwscadconsultacadastro>https://nfe.fazenda.sp.gov.br/nfeweb/services/cadconsultacadastro2.asmx</urlwscadconsultacadastro>"
mTexto += "   <urlwscterecepcao>https://nfe.fazenda.sp.gov.br/cteWEB/services/cteRecepcao.asmx</urlwscterecepcao>"
mTexto += "   <urlwscteretrecepcao>https://nfe.fazenda.sp.gov.br/cteWEB/services/cteRetRecepcao.asmx</urlwscteretrecepcao>"
mTexto += "   <urlwsctecancelamento>https://nfe.fazenda.sp.gov.br/cteWEB/services/cteCancelamento.asmx</urlwsctecancelamento>"
mTexto += "   <urlwscteinutilizacao>https://nfe.fazenda.sp.gov.br/cteWEB/services/cteInutilizacao.asmx</urlwscteinutilizacao>"
mTexto += "   <urlwscteconsultaprotocolo>https://nfe.fazenda.sp.gov.br/cteWEB/services/cteConsulta.asmx</urlwscteconsultaprotocolo>"
mTexto += "   <urlwsctestatusservico>https://nfe.fazenda.sp.gov.br/cteWEB/services/cteStatusServico.asmx</urlwsctestatusservico>"
mTexto += "</ufwsSP>"
mTexto += "<ufwsRS>"
mTexto += "   <urlwsnferecepcao>https://nfe.sefaz.rs.gov.br/ws/Nferecepcao/NFeRecepcao2.asmx</urlwsnferecepcao>"
mTexto += "   <urlwsnferetrecepcao>https://nfe.sefaz.rs.gov.br/ws/NfeRetRecepcao/NfeRetRecepcao2.asmx</urlwsnferetrecepcao>"
mTexto += "   <urlwsnfecancelamento>https://nfe.sefaz.rs.gov.br/ws/NfeCancelamento/NfeCancelamento2.asmx</urlwsnfecancelamento>"
mTexto += "   <urlwsnfeinutilizacao>https://nfe.sefaz.rs.gov.br/ws/nfeinutilizacao/nfeinutilizacao2.asmx</urlwsnfeinutilizacao>"
mTexto += "   <urlwsnfeconsulta>https://nfe.sefaz.rs.gov.br/ws/NfeConsulta/NfeConsulta2.asmx</urlwsnfeconsulta>"
mTexto += "   <urlwsnfestatusservico>https://nfe.sefaz.rs.gov.br/ws/NfeStatusServico/NfeStatusServico2.asmx</urlwsnfestatusservico>"
mTexto += "   <urlwscadconsultacadastro>https://sef.sefaz.rs.gov.br/ws/cadconsultacadastro/cadconsultacadastro2.asmx</urlwscadconsultacadastro>"
mTexto += "   <urlwscterecepcao>https://cte.sefaz.rs.gov.br/ws/cterecepcao/CteRecepcao.asmx</urlwscterecepcao>"
mTexto += "   <urlwscteretrecepcao>https://cte.sefaz.rs.gov.br/ws/cteretrecepcao/cteRetRecepcao.asmx</urlwscteretrecepcao>"
mTexto += "   <urlwsctecancelamento>https://cte.sefaz.rs.gov.br/ws/ctecancelamento/ctecancelamento.asmx</urlwsctecancelamento>"
mTexto += "   <urlwscteinutilizacao>https://cte.sefaz.rs.gov.br/ws/cteinutilizacao/cteinutilizacao.asmx</urlwscteinutilizacao>"
mTexto += "   <urlwscteconsultaprotocolo>https://cte.sefaz.rs.gov.br/ws/cteconsulta/CteConsulta.asmx</urlwscteconsultaprotocolo>"
mTexto += "   <urlwsctestatusservico>https://cte.sefaz.rs.gov.br/ws/ctestatusservico/CteStatusServico.asmx</urlwsctestatusservico>"
mTexto += "</ufwsRS>"
mTexto += "<ufwsNAOIDENTIFICADO>"
mTexto += "   <urlwscadconsultacadastro>https://webservice.set.rn.gov.br/projetonfeprod/set_nfe/servicos/CadConsultaCadastroWS.asmx</urlwscadconsultacadastro>"
mTexto += "</ufwsNAOIDENTIFICADO>"
mTexto += "<ufwsSVRS>"
mTexto += "   <urlwscterecepcao>https://cte.sefaz.rs.gov.br/ws/cterecepcao/CteRecepcao.asmx</urlwscterecepcao>"
mTexto += "   <urlwscteretrecepcao>https://cte.sefaz.rs.gov.br/ws/cteretrecepcao/CteRetRecepcao.asmx</urlwscteretrecepcao>"
mTexto += "   <urlwsctecancelamento>https://cte.sefaz.rs.gov.br/ws/ctecancelamento/ctecancelamento.asmx</urlwsctecancelamento>"
mTexto += "   <urlwscteinutilizacao>https://cte.sefaz.rs.gov.br/ws/cteinutilizacao/cteinutilizacao.asmx</urlwscteinutilizacao>"
mTexto += "   <urlwscteconsultaprotocolo>https://cte.sefaz.rs.gov.br/ws/cteconsulta/cteconsulta.asmx</urlwscteconsultaprotocolo>"
mTexto += "   <urlwsctestatusservico>https://cte.sefaz.rs.gov.br/ws/ctestatusservico/ctestatusservico.asmx</urlwsctestatusservico>"
mTexto += "</ufwsSVRS>"
mTexto += "</webservices>"
Return mTexto
Com base nesse arquivo, fica fácil pegar os endereços de ws, seja pra CTE,CCE,NFE,ou qualquer UF.
Se fosse configuração externa, bastaria um MemoRead()

Código: Selecionar todos

mEndereco := GetUrlWs("SP","urlwscadastroconsultacadastro")

Function GetUrlWs(mUf,mServico)
Local mTexto
mTexto := XmlUrls()
mTexto := PegaNode(mTexto,"ufws"+mUf)
mTexto := PegaNode(mTexto,"urlws"+mServico)
Return mTexto
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Otimizando a hbnfe

Mensagem por JoséQuintas »

Para o SOAP, já postei aqui algumas vezes:

Código: Selecionar todos


Function MsXmlSoapPost(cUrlWs, cXmlSoap, cSoapAction, cCertificateCN)

Local oServerWs, cRetorno

cRetorno := "*ERRO*"
oServerWS := win_oleCreateObject( "MSXML2.ServerXMLHTTP.5.0")
oServerWS:setOption( 3, "CURRENT_USER\MY\" + cCertificateCN)
oServerWS:open("POST", cUrlWS, .F.)
oServerWS:setRequestHeader("SOAPAction", cSoapAction)
oServerWS:setRequestHeader("Content-Type", "application/soap+xml; charset=utf-8")

oServerWS:Send(cXmlSoap)

Do While oServerWS:readyState <> 4
   millisec(500)
Enddo
cRetorno := HB_ANSITOOEM(oServerWS:responseText)
oServerWs := NIL
Return cRetorno
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Otimizando a hbnfe

Mensagem por JoséQuintas »

Consultar o status, já funcionando, ficou assim:

Código: Selecionar todos

Function SefazNfeStatus(cUf, cAmbiente, cCertificadoCN )

cAmbiente := iif(cAmbiente==NIL,"1",cAmbiente)
cUrlWs := GetUrlWs(cUf,"nfestatusservico")

cXmlDados := [<consStatServ xmlns="http://www.portalfiscal.inf.br/nfe" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" versao="2.00">]
cXmlDados +=    [<tpAmb>] + cAmbiente + [</tpAmb>]
cXmlDados +=    [<cUF>] + UfCodigo(cUf) + [</cUF>]
cXmlDados +=    [<xServ>STATUS</xServ>]
cXmlDados += [</consStatServ>]

cXmlSoap := [<?xml version="1.0" encoding="utf-8"?>]
cXmlSoap += [<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">]
cXmlSoap +=    [<soap12:Header>]
cXmlSoap +=       [<nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2">]
cXmlSoap +=          [<cUF>] + UfCodigo(cUf) + [</cUF>]
cXmlSoap +=          [<versaoDados>2.00</versaoDados>]
cXmlSoap +=       [</nfeCabecMsg>]
cXmlSoap +=    [</soap12:Header>]
cXmlSoap +=    [<soap12:Body>]
cXmlSoap +=       [<nfeDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2">]
cXmlSoap +=          cXmlDados
cXmlSoap +=       [</nfeDadosMsg>]
cXmlSoap +=    [</soap12:Body>]
cXmlSoap += [</soap12:Envelope>]

cSoapAction := [http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2/nfeStatusServicoNF2]
    
cXmlResp := MsXmlSoapPost( cUrlWs, cXmlSoap, cSoapAction, cCertificadoCN )

Return cXmlResp
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Otimizando a hbnfe

Mensagem por JoséQuintas »

Este consultar protolo está funcionando, mas não atualizei para o novo jeito de lista de webservices, igual o consulta status.
Inicialmente eu deixava cada lista com seu módulo, tipo... urls de consulta na rotina de consulta.

Código: Selecionar todos

Procedure SefazConsultaNfe(cChave,cCertificateCN)

Local cAmbiente, cUrlWs, cSOAPAction, cXmlResp, cXmlDados, cXmlSoap

cAmbiente := "1"
cXmlResp  := "*ERRO*"

cUrlWs := GetUrlWsConsultaNfe(cChave)

cXmlDados := ""
cXmlDados += [<consSitNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00">]
cXmlDados += [<tpAmb>] + cAmbiente + [</tpAmb>] 
cXmlDados += [<xServ>CONSULTAR</xServ>]
cXmlDados += [<chNFe>] + cChave + [</chNFe>]
cXmlDados += [</consSitNFe>]

cXmlSoap := ""
cXmlSoap += [<?xml version="1.0" encoding="UTF-8"?>]
cXmlSoap += [<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">]
cXmlSoap +=    [<soap12:Header>]
cXmlSoap +=       [<nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2">]
cXmlSoap +=          [<cUF>] + Substr(cChave,1,2) + [</cUF>]
cXmlSoap +=          [<versaoDados>2.00</versaoDados>]
cXmlSoap +=       [</nfeCabecMsg>]
cXmlSoap +=    [</soap12:Header>]
cXmlSoap +=    [<soap12:Body>]
cXmlSoap +=       [<nfeDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2">]
cXmlSoap += cXmlDados
cXmlSoap +=    [</nfeDadosMsg>]
cXmlSoap +=    [</soap12:Body>]
cXmlSoap += [</soap12:Envelope>]


cSoapAction := [http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2]
cXmlResp := MsXmlSoapPost( cUrlWs, cXmlSoap, cSoapAction, cCertificateCN)

Return cXmlResp

Static Function GetUrlWsConsultaNfe(cUf)
Local cUrl

cUf := Substr(cUf,1,2)
cUrl := ""

Do Case
Case cUf == "VV" // SCAN
   cUrl := [https://www.scan.fazenda.gov.br/NfeConsulta2/NfeConsulta2.asmx]
Case cUf == "13" // AM  
   cUrl := [https://nfe.sefaz.am.gov.br/services2/services/NfeConsulta2]
Case cUf == "23" // CE
   cUrl := [https://nfe.sefaz.ce.gov.br/nfe2/services/NfeStatusServico2]
Case cUf == "26" // PE
  cUf := [https://nfe.sefaz.pe.gov.br/nfe-service/services/NfeConsulta2]
Case cUf == "29" // BA
   cUrl := [https://nfe.sefaz.ba.gov.br/webservices/nfenw/NfeConsulta2.asmx]
Case cUf == "31"  // MG
   cUrl := [https://nfe.fazenda.mg.gov.br/nfe2/services/NfeConsulta2]
Case cUf == "35" // SP
   cUrl := [https://nfe.fazenda.sp.gov.br/nfeweb/services/nfeconsulta2.asmx?wdsl]
Case cUf == "41" // PR
   // quando este sai do ar, o sefaz virtual rs entra no lugar
   // quando volta, o sefaz virtual acusa nao cadastrado
   cUrl := [https://nfe2.fazenda.pr.gov.br/nfe/NFeConsulta2]
Case cUf == "43"
   cUrl := [https://nfe.sefaz.rs.gov.br/ws/NfeConsulta/NfeConsulta2.asmx] 
Case cUf == "50" // MS   
   cUrl := [https://nfe.fazenda.ms.gov.br/producao/services2/NfeConsulta2]
Case cUf == "51" // MT   
   cUrl := [https://nfe.sefaz.mt.gov.br/nfews/v2/services/NfeConsulta2?wsdl]
Case cUf == "52" // GO   
   cUrl := [https://nfe.sefaz.go.gov.br/nfe/services/v2/NfeConsulta2?wsdl]
Case cUf $ "32,21,15,22,24" // ES,MA,PA,PI,RN   
   cUrl := [https://www.sefazvirtual.fazenda.gov.br/NfeStatusServico2/NfeStatusServico2.asmx]
Otherwise 
   cUrl :=  [https://nfe.sefazvirtual.rs.gov.br/ws/NfeConsulta/NfeConsulta2.asmx]
EndCase
Return cUrl
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Otimizando a hbnfe

Mensagem por JoséQuintas »

Aqui consultar protocolo de CTE, também funcionando, e também antes de definir a lista de webservices.
Nesta só tem SP, mas com a lista nova, já funciona pra todas as UFs.

Código: Selecionar todos

Procedure SefazConsultaCte(cChave,cCertificateCN)
Local cAmbiente, cUrlWs, cSOAPAction, cXmlResp, cXmlDados, cXmlSoap
cAmbiente := "1"
cXmlResp  := "*ERRO*"
cUrlWs := GetUrlWsConsultaCte(cChave)
cXmlDados := ""
cXmlDados += [<consSitCTe versao="1.04" xmlns="http://www.portalfiscal.inf.br/cte">]
cXmlDados += [<tpAmb>] + cAmbiente + [</tpAmb>] 
cXmlDados += [<xServ>CONSULTAR</xServ>]
cXmlDados += [<chCTe>] + cChave + [</chCTe>]
cXmlDados += [</consSitCTe>]
cXmlSoap := ""
cXmlSoap += [<?xml version="1.0" encoding="UTF-8"?>]
cXmlSoap += [<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">]
cXmlSoap +=    [<soap12:Header>]
cXmlSoap +=       [<cteCabecMsg xmlns="http://www.portalfiscal.inf.br/cte/wsdl/CteConsulta">]
cXmlSoap +=          [<cUF>] + Substr(cChave,1,2) + [</cUF>]
cXmlSoap +=          [<versaoDados>1.04</versaoDados>]
cXmlSoap +=       [</cteCabecMsg>]
cXmlSoap +=    [</soap12:Header>]
cXmlSoap +=    [<soap12:Body>]
cXmlSoap +=       [<cteDadosMsg xmlns="http://www.portalfiscal.inf.br/cte/wsdl/CteConsulta">]
cXmlSoap += cXmlDados
cXmlSoap +=    [</cteDadosMsg>]
cXmlSoap +=    [</soap12:Body>]
cXmlSoap += [</soap12:Envelope>]
cSoapAction := [http://www.portalfiscal.inf.br/cte/wsdl/CteConsulta/cteConsultaCT]
cXmlResp := MsXmlSoapPost( cUrlWs, cXmlSoap, cSoapAction, cCertificateCN)
Return cXmlResp

Static Function GetUrlWsConsultaCte(cUf)
Local cUrl
cUf := Substr(cUf,1,2)
cUrl := ""
Do Case
Case cUf == "35" // SP
   cUrl := [https://nfe.fazenda.sp.gov.br/cteWEB/services/cteConsulta.asmx?wsdl]
EndCase
Return cUrl
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Otimizando a hbnfe

Mensagem por JoséQuintas »

Eu armazeno todas as NFEs de clientes no meu servidor.
E sempre consulto protocolo de todas, pra ver se realmente estão autorizadas.
Com isso, fiz primeiro a consulta de NFEs.

Um cliente começou a emitir CCE e CTE, então alterei todas as rotinas do servidor pra salvar NFE, CCE e CTE.
Com isso, os CTEs travavam tudo, porque eu não tinha consulta de CTE.
Então fiz a consulta de CTE.

É por aí que estou indo.
No intervalo de serviços, ou na necessidade, vou mexendo um pouco.

Pensei na possibilidade de salvar os XMLs modelo, pra webservice e pedidos.
Isso facilitaria mudanças sem ter que mexer em fontes.
Tipo...
<dfddf><sfsfdfd><sdfdsfdsfd><sfsdfdsds>[NUMNOTA]<sdfsdfd><sfsdfds><sdfdsfd><fsdfdsd>

E na hora de usar seria só substituir,
mXml := StrTran("[NUMNOTA]",NumeroNota)

Como deu pra ver, uma única rotina de SOAP atende tudo, reduzindo apenas a criar XMLs.
Se deixar XMLs modelos em disco, vai reduzir mais ainda.
No caso de UFs trabalhando com modelo diferente, só criar um pra cada em disco.
E em mudanças de versão... idem.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Otimizando a hbnfe

Mensagem por JoséQuintas »

Estou disposto a entender direito todo o troço.
Comecei a mexer na assinatura.
Não sei se foi apenas preparada pra diferenças, mas hoje não há nenhuma.
No momento este IF é inútil.

Código: Selecionar todos

      IF ::ohbNFe:nSOAP = HBNFE_CURL
        cXMLSig := '<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />' +;
                   '<Reference URI="#'+URI+'">' +;
                   '<Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />' +;
                   '<DigestValue></DigestValue></Reference></SignedInfo><SignatureValue></SignatureValue><KeyInfo><X509Data></X509Data></KeyInfo></Signature>'
      ELSE
        cXMLSig := '<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />' +;
                   '<Reference URI="#'+URI+'">' +;
                   '<Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />' +;
                   '<DigestValue></DigestValue></Reference></SignedInfo><SignatureValue></SignatureValue><KeyInfo></KeyInfo></Signature>'
      ENDIF
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder