Clipper On Line • Ver Tópico - Sobre as mudanças da SefazClass

Sobre as mudanças da SefazClass

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

Moderador: Moderadores

 

Sobre as mudanças da SefazClass

Mensagempor JoséQuintas » 24 Abr 2018 17:16

Acho que vai ficar mais fácil de entender o que altera, e o que alterar
Uma coisa simples: consultar o status

No MDFE, SoapAction e SoapService são fixos, mas existe a lista pra escolher entre endereços de produção e homologação

METHOD MDFeStatusServico( cUF, cCertificado, cAmbiente ) CLASS SefazClass

   hb_Default( @::cProjeto, WS_PROJETO_MDFE )
   hb_Default( @::cVersao, "3.00" )
   ::cSoapAction  := "MDFeStatusServico"
   ::cSoapService := "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeStatusServico/mdfeStatusServicoMDF"
   ::aSoapUrlList := { ;
      { "**", "3.00", WS_AMBIENTE_PRODUCAO,    "https://mdfe.svrs.rs.gov.br/ws/MDFeStatusServico/MDFeStatusServico.asmx" }, ;
      ;
      { "**", "3.00", WS_AMBIENTE_HOMOLOGACAO, "https://mdfe-homologacao.svrs.rs.gov.br/ws/MDFeStatusServico/MDFeStatusServico.asmx" } }
   ::Setup( cUF, cCertificado, cAmbiente, WS_MDFE_STATUSSERVICO )

   ::cXmlEnvio := [<consStatServMDFe versao="] + ::cVersao + [" ] + WS_XMLNS_MDFE + [>]
   ::cXmlEnvio +=    XmlTag( "tpAmb", ::cAmbiente )
   ::cXmlEnvio +=    XmlTag( "cUF", ::UFCodigo( ::cUF ) )
   ::cXmlEnvio +=    XmlTag( "xServ", "STATUS" )
   ::cXmlEnvio += [</consStatServMDFe>]
   ::XmlSoapPost()

   RETURN ::cXmlRetorno


Já no CTE, o endereço de internet também depende de UF.

METHOD CTeStatusServico( cUF, cCertificado, cAmbiente ) CLASS SefazClass

   hb_Default( @::cVersao, "3.00" )
   hb_Default( @::cProjeto, WS_PROJETO_CTE )
   ::cSoapAction  := "cteStatusServicoCT"
   ::cSoapService := "http://www.portalfiscal.inf.br/cte/wsdl/CteStatusServico"
   ::aSoapUrlList := { ;
      { "MG",   "3.00", WS_AMBIENTE_PRODUCAO,    "https://cte.fazenda.mg.gov.br/cte/services/CteStatusServico" }, ;
      { "MT",   "3.00", WS_AMBIENTE_PRODUCAO,    "https://cte.sefaz.mt.gov.br/ctews/services/CteStatusServico" }, ;
      { "MS",   "3.00", WS_AMBIENTE_PRODUCAO,    "https://producao.cte.ms.gov.br/ws/CteStatusServico" }, ;
      { "PR",   "3.00", WS_AMBIENTE_PRODUCAO,    "https://cte.fazenda.pr.gov.br/cte/CteStatusServico?wsdl" }, ;
      { "SP",   "3.00", WS_AMBIENTE_PRODUCAO,    "https://nfe.fazenda.sp.gov.br/cteWEB/services/cteStatusServico.asmx" }, ;
      { "SVSP", "3.00", WS_AMBIENTE_PRODUCAO,    "https://nfe.fazenda.sp.gov.br/cteWEB/services/CteStatusServico.asmx" }, ;
      { "SVRS", "3.00", WS_AMBIENTE_PRODUCAO,    "https://cte.svrs.rs.gov.br/ws/ctestatusservico/CteStatusServico.asmx" }, ;
      ;
      { "SP",   "3.00", WS_AMBIENTE_HOMOLOGACAO, "https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/cteStatusServico.asmx" }, ;
      { "SVRS", "3.00", WS_AMBIENTE_HOMOLOGACAO, "https://cte-homologacao.svrs.rs.gov.br/ws/ctestatusservico/CteStatusServico.asmx" } }
   ::Setup( cUF, cCertificado, cAmbiente, WS_CTE_STATUSSERVICO )

   ::cXmlEnvio    := [<consStatServCte versao="] + ::cVersao + [" ] + WS_XMLNS_CTE + [>]
   ::cXmlEnvio    +=    XmlTag( "tpAmb", ::cAmbiente )
   ::cXmlEnvio    +=    XmlTag( "xServ", "STATUS" )
   ::cXmlEnvio    += [</consStatServCte>]
   ::XmlSoapPost()

   RETURN ::cXmlRetorno


Já na NFE.... VIXE....
SoapAction e SoapService não são padrão.
Tem a lista de endereços
Tem também a versão 3.10 e 4.00
Tem também NFE e NFCE
Por isso só movi uma parte, por enquanto

METHOD NFeStatusServico( cUF, cCertificado, cAmbiente ) CLASS SefazClass

   hb_Default( @::cProjeto, WS_PROJETO_NFE )
   hb_Default( @::cVersao, "3.10" )
   IF ::cVersao == "3.10"
      DO CASE
      CASE ::cUF == "BA"
         ::cSoapAction  := "nfeStatusServicoNF"
         ::cSoapService := "http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico"
      OTHERWISE
         ::cSoapAction  := "nfeStatusServicoNF2"
         ::cSoapService := "http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"
      ENDCASE   
   ELSE
      ::cSoapAction  := "nfeStatusServicoNF"
      ::cSoapService := "http://www.portalfiscal.inf.br/nfe/wsdl/NFeStatusServico4"
   ENDIF
   ::Setup( cUF, cCertificado, cAmbiente, WS_NFE_STATUSSERVICO )

   ::cXmlEnvio    := [<consStatServ versao="] + ::cVersao + [" ] + WS_XMLNS_NFE + [>]
   ::cXmlEnvio    +=    XmlTag( "tpAmb", ::cAmbiente )
   ::cXmlEnvio    +=    XmlTag( "cUF", ::UFCodigo( ::cUF ) )
   ::cXmlEnvio    +=    XmlTag( "xServ", "STATUS" )
   ::cXmlEnvio    += [</consStatServ>]
   ::XmlSoapPost()

   RETURN ::cXmlRetorno


Mas fica claro o seguinte:
A comunicação é simples, igual pra todos.
A complicação, é o governo ou as UFs inventam.
Existe padrão, mas nem sempre é seguido.

E se a classe não funcionar pra determinada UF.... é conferir SoapAction, SoapService e a lista de endereços
O mesmo se inventarem um serviço novo, ou documento novo.

Aonde pegar essas informações:
- No portal da NFE, CTE, MDFE, de homologação e de produção
- Abrindo o webservice, geralmente mostra SoapAction e SoapService, no meio do XML, só pesquisar a palavra "SoapAction" e "www.portalfiscal.inf.br/...."
Até agora funcionou colocar como SoapAction apenas a última palavra.
É algo como um path do Windows, onde SoapService contém a indicação desde a raiz, então em SoapAction basta a última pasta do path.

Exemplos mais conhecidos:
cSoapService := "d:\harbour\"
cSoapAction := "d:\harbour\bin" que pode ser abreviado para "bin", porque cSoapService já vai indicar a "pasta root"

Em internet é a mesma coisa, só que ao invés de d: contém http:, o domínio seria a pasta raiz (www.algumacoisa.com.br), e o restante subpastas.

Então... isso dá uma idéia melhor de que o governo complica, porque não usa nomes padrão pra cada pasta.
A maior parte do fonte, são os IFs/CASEs, por causa do governo não usar padrão.
Na NFE 4.0 vai melhorar um pouco, quando ela estiver sozinha sem a 3.10.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18010
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Sobre as mudanças da SefazClass

Mensagempor JoséQuintas » 26 Abr 2018 10:50

Achei uma forma mais "simpática" de definir os endereços.
Adotei a seguinte nomenclatura: "3.10P", "3.10H", "3.10PC", "3.10HC"

Onde:
P = produção
H = homologação
PC = produção Consumidor
HC = homologação Consumidor

Motivo:
Pra não duplicar as listas, e reduzir os CASEs.
Nota do consumidor pode ser na mesma da nota comum, ou ter serviço em separado.
Então... nota comum usa P ou H.
E nota ao consumidor, primeiro procura por PC ou HC, e se não encontrar usa P ou H que é da nota comum.

Ainda estou terminando as alterações.
Quando finalizar coloco aqui como ficou.

No uso não faz diferença, mas faz pra quem for alterar/conferir os endereços.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18010
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Sobre as mudanças da SefazClass

Mensagempor JoséQuintas » 07 Mai 2018 15:56

Todos os endereços movidos novamente para um arquivo CH, depois que o esquema foi definido.
Só ainda não sei se separo da sefazclass.ch e deixo igual antes em arquivo próprio.

Coloquei pra rodar hoje, deu só um problema nos eventos de NFE, porque a versão no SOAP é 1.00.
Com certeza tive que resolver na hora.

Caso alguém vá usar pra 4.00 ou outra coisa... não confirmei se vai precisar mexer nesta parte aonde define a versão do SOAP.
Essa parte adicionei HOJE, pra resolver a questão de eventos de NFE.

   IF "CadConsultaCadastro" $ ::cSoapAction
      cSoapVersion := "2.00"
   ELSEIF "nfeRecepcaoEvento" $ ::cSoapAction
      cSoapVersion := "1.00"
   ENDIF
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18010
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para Projeto hbNFe

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 2 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro