Blog

Criando um conector para comunicação através da API da SEFAZ

O conector é o meio de comunicação entre a API e o servidor da SEFAZ, sempre que for consultar ou enviar dados de/para a SEFAZ você precisará iniciar um conector. Entre outras coisas ele é responsável pela autenticação entre os dois lados da comunicação.

Para criar um novo conector utilize a função “SEFAZ – Criar Conexão” com os seguintes parâmetros:

  1. UF – Sigla (ou código do IBGE) da SEFAZ que irá receber a comunicação (A UF da SEFAZ que o fornecedor/vendedor/emissor tem inscrição estadual. Independente do WebService/Autorizador, somente a sigla. EX: BA, PE, SP, RS…);
  2. Ambiente – Se for verdadeiro indica o ambiente de produção, falso de homologação (testes);
  3. Tipo de certificado:
    • A1 – É o formato mais simples e funciona na camada cliente ou servidor.
    • A3 – Utiliza uma DLL (ou .SO) compatível com o padrão PKCS#11, cada fabricante de hardware (token/leitor) fornece as DLLs e suas configurações.
    • MsCapi – Esse recurso utiliza o driver da Microsoft, utilizando o mesmo driver que muitos navegadores utilizam para acessar o certificado (está disponível no Windows apenas).
  4. Certificado – Depende do tipo:
    • A1 – Se for A1 deve-se passar o caminho completo (EX: “C:\CERTIFICADO\meu.pfx”), tenha certeza que o usuário do servidor de aplicação (Tomcat) tenha acesso à pasta, e que o caminho foi passado corretamente. De acordo com o servidor o nome pode ser case sensitive.
    • A3 – Deve ser passado os dados de configuração da DLL do token ou cartão criptográfico compatível com o padrão PKCS#11. Algumas dicas podem ser obtidas neste tópico: Configuração de certificados A3 via PKCS#11 Para utilização do certificado. o suporte não cobre a instação e configuração do certificado no Java. Se necessário entre em contato com o fornecedor do equipamento para mais informações.
    • MsCapi – Informar o nome do certificado, ou a palavra “AUTO:” seguida por parte do nome do certificado, por exemplo o CNPJ. EX: “AUTO:18590980000195“, assim será retornado o primeiro certificado que tenha esse CNPJ no nome. Neste caso não há um arquivo fisico, e sim um certificado instalado no compuador, no caso de e-CNPJ normalmente ele é identificado pelo “NOME:CNPJ”.
  5. Senha – Senha do certificado.

Alternando entre as versões do serviço

Para alternar entre as diferentes versões do serviço chame a função “SEFAZ – Definir Versão” passando o conector e a versão desejada. Ex: SEFAZ – Definir Versão(conector, “4.00“);

Passos extras

Alguns certificados podem apresentar pequenas variações, como não ter o nome e CNPJ do emitente, ou ser de uma cadeia de certificação não reconhecida pelo Java. Para corrigir essas discrepâncias existem algumas funções auxiliares que devem ser chamadas logo após criar o conector.

SEFAZ – Definir dados do emissor

Utilize quando o certificado não retornar ou contiver o nome e/ou CNPJ do certificado corretamente. Através dessa função será forçado esses  dados diretamente, sem levar em consideração o que está no  certificado.

OBS: Na camada cliente a função retorna o conector modificado. Na camada servidor ela tem efeito colateral.

SEFAZ – Definir Tipo de Serviço

Utilize esta função para trocar o serviço para “NFCE“, “MDFE“, “GNRE” ou “NFE” (padrão). Caso contrário você pode receber um erro (código 450), informando que não era esperado código diferente de “55” ou similar. Por padrão o conector é criado para NF-e (modelo 55). Após chamar essa função todas as chamadas subsequentes a ela usarão os webservices do serviço determinado.

SEFAZ – Definir Servidor

Usado para determinar qual servidor vai receber a requisição, especialmente quando o serviço existe no Ambiente Nacional (AN), ou para entrar em contigência.

SEFAZ – Definir TrustStore

Utilize quando houver problemas no reconhecimento do certificado na comunicação (Erro 403).

Observações

Um conector criado na camada cliente pode ser passado para camada servidor para criação do(s) XML(s) da NF-e por exemplo. Esse recurso visa facilitar a montagem dos XMLs já que normalmente os dados estão no banco de dados que só está disponível na camada servidor.

One Comment - Leave a Comment

Leave a comment