Gerando uma MDF-e Síncrono com a API da SEFAZ
O processo resumido de geração de uma MDF-e usando nossa API é descrito abaixo. Dúvidas e referências devem ser consultadas no material oficial disponibilizado pela SEFAZ, em especial o manual oficial da SEFAZ, Notas técnicas e os XSDs disponibilizados no site: http://www.nfe.fazenda.gov.br/portal/principal.aspx .
Parte 1 – Gerando o XML
- Crie um conector:
- Caso o certificado não tenha explicito o CNPJ e Nome do emissor utilize a função: “SEFAZ – Definir dados do emissor(…)”.
- O tipo do conector deve ser definido para “MDFE” usando a função “SEFAZ – Definir Tipo de Serviço“.
- O servidor de destino é o “SVRS” e deve ser definido usando a função ‘SEFAZ – Definir Servidor‘;
- Crie uma novo MDF-e através da função “SEFAZ XML – Criar novo XML”, passando os seguintes parâmetros:
- Conector;
- “MDFE” (Letras) – Indica o tipo do documento a ser criado.
- Utilize a função “SEFAZ NF-e – Adicionar Elemento ao XML” para adicionar os dados do XML do documento. A função recebe como parâmetro os seguintes itens:
- O retorno da função “SEFAZ XML – Criar novo XML“;
- No segundo parâmetro ela recebe o caminho da tag a ser adicionada;
- No terceiro o valor a ser adicionado;
- E por último, como OPCIONAL a máscara de formatação, caso não deseja que a função NÃO formate o valor, adicione a constante “TString” nesse parâmetro. Neste caso, será adicionado a tag com o texto exato passado no terceiro parâmetro, evitando inclusive que valores ZERADOS sejam suprimidos.
- Adicionar os dados do emitente (“MDFe/infMDFe/ide/cUF”) usando a função “SEFAZ NF-e – Adicionar Elemento ao XML“;
- Após adicionar todas as tags informe o hashCSRT através da função “SEFAZ NF-e – Adicionar Elemento ao XML“, passando os seguintes parâmetros:
- O retorno da função “SEFAZ XML – Criar novo XML“;
- Caminho da tag: “MDFe/infMDFe/infRespTec/hashCSRT“;
- Valor do CSRT usando o seguinte formato: “CSRT:<VALOR DO CSRT>“;
- No último campo informe a máscara “${hashCSRT}“. Desta forma o hash será calculado baseado nos dados do documento.
- Após informar todos os dados utilize a função “SEFAZ XML – Obter XML” para gerar o XML:.
- Ao final assine o XML, chamando a função “SEFAZ – Assinar XML“. e passando os seguintes parâmetros:
- Conector (Variante);
- XML Original – (Letras) Texto do XML gerado;
- Nome da tag: Informar a constante Letras: “infMDFe“.
- Obter o retorno da função com o XML assinado e gravar em arquivo ou no banco usando as funções nativas do Maker:
- DICA: Para gravar no banco utilize um campo de texto longo (TEXT, CLOB) com o mesmo charset do XML (UTF-8) ou BLOB (Bytea, VARBINARY, Image, …);
Parte 2 – Transmitindo o XML
- Após montar todo o XML de MDF-e com os dados desejados precisamos envia-la para SEFAZ, para isso se utiliza a função “SEFAZ MDF-e – Recepção Síncrona“;
- Por fim, grave a resposta em XML da SEFAZ. Ela será usada para verifica a situação;
- Usar a função “SEFAZ – Processar XML de Retorno” para verificar se retornou com sucesso, ou alguma instrução de erro.
- Esta função trabalha de forma análoga à de montagem de XML, assim, as tags são reduzidas a uma forma de estrutura de pastas, de acordo com a esttutura do XML, assim, para pegar o tpAmbpor exemplo se passa o caminho completo: “retMDFe/tpAmb“;
- DICA: Utilize o depurador de fluxos do Maker para ver exatamente os dados retornados por essa função.
Parte 3 – XML de distribuição
- Para montar o XML de distribuição será utilizada a função “SEFAZ – Montar XML de distribuição“, os parâmetros de entrada são:
- O XML do lote enviado;
- O XML retornado na consulta da situação do lote;
- Deixar em branco irá pegar a primeira;
- A função irá retornar o XML de distribuição que pode ser usado para enviar ao cliente e/ou gerar a DANFE.
Parte 5 – Gerar DANFE
- Para gerar a DANFE em PDF utilize a função “SEFAZ NF-e – Gerar DANFE”, passando como parâmetros:
- Caminho completo do arquivo XML de distribuição ou conteúdo do XML de distribuição (Letras);
- DICA: Você pode obter o caminho relativo do PDF gerado através da seguinte sequencia:
- Remova o caminho absoluto do arquivo obtendo somente o nome;
- Adicione antes do nome do arquivo “tmp/”;
- A URL final deve ficar “tmp/nomeArquivo.pdf”;
- Use a função de abrir URL numa moldura, ou download para enviar para o cliente.