SEFAZ

De Wiki do Leitão
Ir para: navegação, pesquisa

Esta classe representa um WebService da SEFAZ. Reponsável por realizar toda a comunicação com a SEFAZ e abstraír os métodos remotos como métodos locais.

Iinicialização

A classe deve ser instanciada passando 3 ou 4 parâmetros para definir o WebService a ser utilizado:

  • Certificado - Passe a implementação da interface RFWCertificate para definir o certificado do cliente a ser utilizado durante a comunicação. O sertificado do cliente é utilizado quando solicitado pela SEFAZ, entre eles: assinatura da mensagem, assinatura de documentos (como a NFe e a NFCe) e autenticação da conexão.
  • Servidor WebService - Representação pela enum SefazWebServices do webservice a ser utilizado. Podendo ser o servidor dos estados suportados, do sistema virtual ou ainda do sistema virtual de contingência.
  • Ambiente - Indica se deve se comunicar com o ambiente de homologação (testes/sem validade fiscal) ou de produção (com validade fiscal).
  • Certificados Confiáveis [Opcional] - Outra implementação da classe RFWCertificate utilizada para passar os certificados raiz que são considerados confiáveis. Na prática, pode ser passado um JKS (Java Key Store) com os certificados dos servidores para validar e confiar na comunixação). Se não for passado o módulo utilizará o JKS interno com os certificados que estavam válidos no momento de compilação da versão do módulo. Como os sertificados tem data de validade, com o tempo o KeyStore interno pode ter apenas certificados inválidos.


Métodos Disponibilizados

Os métodos disponibilizados nesta classe tendem a refletir o mesmo nome dos métodos disponibilizados dentro do WebService. Por exmeplo, ao abrir o endereço do WebService, é exibido os nomes dos métodos que aquele WebService disponibilida, o nome desses métodos é utilizado como base dos métodos desta classe. Veja um exemplo do WebService https://www.sefazvirtual.fazenda.gov.br/NFeStatusServico4/NFeStatusServico4.asmx:


Exemplo de método disponibilizado pelo WebService


Anexado ao nome do método são acrescentados os seguintes prefixos:

  • Versão do XSD - a versão do arquivo XSD utilizada para acionar este método é anexada ao método, assim o RFW consegue manter os métodos antigos enquanto for possível a medida que agrega as novas atualizações requeridas.
  • by[Chave] - Métodos de consulta que precisam de poucos argumentos, como consulta de cadastro por CNPJ, ou resultado de processamento da NFe por Número do Recibo têm métodos co esse sufixo. Este métodos recebem os argumentos diretamente, sem que seja necessário montar o objeto JAXB para realizar a consulta pelo método convêncional.
  • asXML - O método que tem esse sufixo final retorna o XML em formato String (bruto) do jeito como foi recebido do WebService, enquanto que o método sem esse sufixo retorna a mensagem já 'convertida' no objeto equivalente criado pelo JAXB.


Note 64.png
Se desejar obter o XML e o Objeto
A diferença entre os métodos com o sufixo asXML é apenas a chamada do método
[[SEFAZUtils]].readXMLToObject(xml, [JAXB Object].class

Ou seja, para obter o XML e o Objeto, recomenda-se obter a resposta com o método marcado asXML e em seguinda converter o XML no objeto com a chamada do método acima passando a classe do objeto equivalente do XSD de resposta.


Métodos Diretos

A depender da complexidade e das informações necessárias para a chamada do método remoto, o método receberá como argumentos:

  • diretamente um objeto JAXB com o conteúdo a ser convertido no XML e enviado; ou,
  • os especificamente os dados necessários e montará o objeto/XML a ser transmitido internamente.