{"id":3605,"date":"2024-07-09T17:00:24","date_gmt":"2024-07-09T20:00:24","guid":{"rendered":"https:\/\/www.l2maker.com.br\/documentacao\/?p=3605"},"modified":"2024-09-26T16:18:47","modified_gmt":"2024-09-26T19:18:47","slug":"gerando-uma-mdf-e-sincrono-com-a-api-da-sefaz","status":"publish","type":"post","link":"https:\/\/www.l2maker.com.br\/documentacao\/2024\/07\/gerando-uma-mdf-e-sincrono-com-a-api-da-sefaz\/","title":{"rendered":"Gerando uma MDF-e S\u00edncrono com a API da SEFAZ"},"content":{"rendered":"\n<p>O processo resumido de gera\u00e7\u00e3o de uma MDF-e usando nossa API \u00e9 descrito abaixo. D\u00favidas e refer\u00eancias devem ser consultadas no material oficial disponibilizado pela SEFAZ,&nbsp; em especial o manual oficial da SEFAZ, Notas t\u00e9cnicas e os XSDs disponibilizados no site: <a href=\"https:\/\/dfe-portal.svrs.rs.gov.br\/Mdfe\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/www.nfe.fazenda.gov.br\/portal\/principal.aspx<\/a> .<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Parte 1 &#8211; Gerando o XML<\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.l2maker.com.br\/documentacao\/2016\/11\/criando-um-conector-para-comunicacao-atraves-da-api-da-sefaz\/\">Crie um conector<\/a>:\n<ul class=\"wp-block-list\">\n<li>Caso o certificado n\u00e3o tenha explicito o CNPJ e Nome do emissor utilize a fun\u00e7\u00e3o:&nbsp;&#8220;<strong>SEFAZ &#8211; Definir dados do emissor<\/strong>(&#8230;)&#8221;. <\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>O tipo do conector deve ser definido para &#8220;<strong>MDFE<\/strong>&#8221; usando a fun\u00e7\u00e3o &#8220;<strong>SEFAZ &#8211; Definir Tipo de Servi\u00e7o<\/strong>&#8220;.<\/li>\n\n\n\n<li>O servidor de destino \u00e9 o &#8220;<strong>SVRS<\/strong>&#8221; e deve ser definido usando a fun\u00e7\u00e3o &#8216;<strong>SEFAZ \u2013 Definir Servidor<\/strong>&#8216;;<\/li>\n\n\n\n<li>Crie uma novo MDF-e atrav\u00e9s da fun\u00e7\u00e3o &#8220;<strong>SEFAZ XML &#8211; Criar novo XM<\/strong>L&#8221;, passando os seguintes par\u00e2metros:\n<ol class=\"wp-block-list\">\n<li>Conector;<\/li>\n\n\n\n<li>&#8220;MDFE&#8221; (Letras) &#8211; Indica o tipo do documento a ser criado.<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>Utilize a fun\u00e7\u00e3o &#8220;<strong>SEFAZ NF-e &#8211; Adicionar Elemento ao XML<\/strong>&#8221; para adicionar os dados do XML do documento. A fun\u00e7\u00e3o recebe como par\u00e2metro os seguintes itens:\n<ul class=\"wp-block-list\">\n<li> O retorno da fun\u00e7\u00e3o  &#8220;<strong><strong>SEFAZ XML &#8211; Criar novo XM<\/strong>L<\/strong>&#8220;;<\/li>\n\n\n\n<li>No segundo par\u00e2metro ela recebe o caminho da tag a ser adicionada;<\/li>\n\n\n\n<li>No terceiro o valor a ser adicionado;<\/li>\n\n\n\n<li>E por \u00faltimo, como OPCIONAL a m\u00e1scara de formata\u00e7\u00e3o, caso n\u00e3o deseja que a fun\u00e7\u00e3o <strong>N\u00c3O formate<\/strong> o valor, adicione a constante &#8220;<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">TString<\/mark><\/strong>&#8221; nesse par\u00e2metro. Neste caso, ser\u00e1 adicionado a tag com o texto exato passado no terceiro par\u00e2metro, evitando inclusive que valores ZERADOS sejam suprimidos.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Adicionar os dados do emitente (&#8220;MDFe\/infMDFe\/ide\/cUF&#8221;) usando a fun\u00e7\u00e3o &#8220;<strong>SEFAZ NF-e &#8211; Adicionar Elemento ao XML<\/strong>&#8220;;<\/li>\n\n\n\n<li>Ap\u00f3s adicionar todas as tags informe o hashCSRT atrav\u00e9s da fun\u00e7\u00e3o &#8220;<strong>SEFAZ NF-e &#8211; Adicionar Elemento ao XML<\/strong>&#8220;, passando os seguintes par\u00e2metros:\n<ul class=\"wp-block-list\">\n<li> O retorno da fun\u00e7\u00e3o  &#8220;<strong><strong>SEFAZ XML &#8211; Criar novo XM<\/strong>L<\/strong>&#8220;;<\/li>\n\n\n\n<li>Caminho da tag: &#8220;<strong>MDFe\/infMDFe\/infRespTec\/hashCSRT<\/strong>&#8220;;<\/li>\n\n\n\n<li>Valor do CSRT usando o seguinte formato: &#8220;<strong>CSRT:<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">&lt;VALOR DO CSRT&gt;<\/mark><\/strong>&#8220;;<\/li>\n\n\n\n<li>No \u00faltimo campo informe a m\u00e1scara &#8220;<strong>${hashCSRT}<\/strong>&#8220;. Desta forma o hash ser\u00e1 calculado baseado nos dados do documento.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Ap\u00f3s informar&nbsp;todos&nbsp;os dados utilize a fun\u00e7\u00e3o &#8220;<strong>SEFAZ XML &#8211; Obter XML<\/strong>&#8221; para gerar o XML:. <\/li>\n\n\n\n<li>Ao final assine o XML, chamando a fun\u00e7\u00e3o &#8220;<strong>SEFAZ &#8211; Assinar XML<\/strong>&#8220;. e passando os seguintes par\u00e2metros:\n<ol class=\"wp-block-list\">\n<li>Conector (Variante);<\/li>\n\n\n\n<li>XML Original &#8211; (Letras) Texto do XML gerado;<\/li>\n\n\n\n<li>Nome da tag: Informar a constante Letras:&nbsp;&#8220;<strong>infMDFe<\/strong>&#8220;. <\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>Obter o retorno da fun\u00e7\u00e3o com o XML assinado e gravar em arquivo ou no banco usando as fun\u00e7\u00f5es &nbsp;nativas do Maker:\n<ol class=\"wp-block-list\">\n<li>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, &#8230;); <\/li>\n<\/ol>\n<\/li>\n<\/ol>\n\n\n\n<h1 class=\"wp-block-heading\">Parte 2 &#8211; Transmitindo o XML<\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Ap\u00f3s montar todo o XML &nbsp;de MDF-e com os dados desejados precisamos envia-la para SEFAZ, para isso se utiliza a fun\u00e7\u00e3o &#8220;<strong>SEFAZ MDF-e &#8211; Recep\u00e7\u00e3o S\u00edncrona<\/strong>&#8220;;<\/li>\n\n\n\n<li>Por fim, grave a resposta em XML&nbsp;da SEFAZ. Ela ser\u00e1 usada para verifica a situa\u00e7\u00e3o;<\/li>\n\n\n\n<li>Usar a fun\u00e7\u00e3o &#8220;<strong>SEFAZ &#8211; Processar XML de Retorno<\/strong>&#8221; para verificar se retornou com sucesso, ou alguma instru\u00e7\u00e3o de erro.\n<ul class=\"wp-block-list\">\n<li>Esta fun\u00e7\u00e3o trabalha de forma an\u00e1loga \u00e0 de montagem de XML, assim, as tags s\u00e3o 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: &#8220;<strong>retMDFe\/tpAmb<\/strong>&#8220;;<\/li>\n\n\n\n<li>DICA: Utilize o depurador de fluxos do Maker para ver exatamente os dados retornados por essa fun\u00e7\u00e3o.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h1 class=\"wp-block-heading\">Parte 3 &#8211; XML de distribui\u00e7\u00e3o<\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Para montar o XML de distribui\u00e7\u00e3o ser\u00e1 utilizada a fun\u00e7\u00e3o &#8220;<strong>SEFAZ &#8211; Montar XML de distribui\u00e7\u00e3o<\/strong>&#8220;, os par\u00e2metros de entrada s\u00e3o:\n<ol class=\"wp-block-list\">\n<li>O XML do lote enviado;<\/li>\n\n\n\n<li>O XML retornado na consulta da situa\u00e7\u00e3o do lote;<\/li>\n\n\n\n<li>Deixar em branco ir\u00e1 pegar a primeira;<\/li>\n\n\n\n<li>A fun\u00e7\u00e3o ir\u00e1 retornar o XML de distribui\u00e7\u00e3o que pode ser usado para enviar ao cliente e\/ou gerar a DANFE.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n\n\n\n<h1 class=\"wp-block-heading\">Parte 5 &#8211;&nbsp;Gerar DANFE<\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Para gerar a DANFE em PDF utilize a fun\u00e7\u00e3o &#8220;<strong>SEFAZ NF-e &#8211; Gerar DANFE&#8221;<\/strong>, passando como par\u00e2metros:\n<ol class=\"wp-block-list\">\n<li>Caminho completo do arquivo XML de distribui\u00e7\u00e3o&nbsp;ou conte\u00fado do XML de distribui\u00e7\u00e3o&nbsp;(Letras);<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>DICA: Voc\u00ea pode obter o caminho relativo do PDF gerado atrav\u00e9s da seguinte sequencia:\n<ol class=\"wp-block-list\">\n<li>Remova o caminho absoluto&nbsp;do arquivo obtendo somente o nome;<\/li>\n\n\n\n<li>Adicione antes do nome do arquivo &#8220;tmp\/&#8221;;<\/li>\n\n\n\n<li>A URL final deve ficar &#8220;tmp\/nomeArquivo.pdf&#8221;;<\/li>\n\n\n\n<li>Use a fun\u00e7\u00e3o de abrir URL numa moldura, ou download para enviar para o cliente.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>O processo resumido de gera\u00e7\u00e3o de uma MDF-e usando nossa API \u00e9 descrito abaixo. D\u00favidas e refer\u00eancias devem ser consultadas no material oficial disponibilizado pela SEFAZ,&nbsp; em especial o manual oficial da SEFAZ, Notas t\u00e9cnicas e os XSDs disponibilizados no site: http:\/\/www.nfe.fazenda.gov.br\/portal\/principal.aspx . Parte 1 &#8211; Gerando o XML Parte 2 &#8211; Transmitindo o XML [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[47],"tags":[],"class_list":["post-3605","post","type-post","status-publish","format-standard","hentry","category-documentacao"],"_links":{"self":[{"href":"https:\/\/www.l2maker.com.br\/documentacao\/wp-json\/wp\/v2\/posts\/3605","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.l2maker.com.br\/documentacao\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.l2maker.com.br\/documentacao\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.l2maker.com.br\/documentacao\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.l2maker.com.br\/documentacao\/wp-json\/wp\/v2\/comments?post=3605"}],"version-history":[{"count":10,"href":"https:\/\/www.l2maker.com.br\/documentacao\/wp-json\/wp\/v2\/posts\/3605\/revisions"}],"predecessor-version":[{"id":3695,"href":"https:\/\/www.l2maker.com.br\/documentacao\/wp-json\/wp\/v2\/posts\/3605\/revisions\/3695"}],"wp:attachment":[{"href":"https:\/\/www.l2maker.com.br\/documentacao\/wp-json\/wp\/v2\/media?parent=3605"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.l2maker.com.br\/documentacao\/wp-json\/wp\/v2\/categories?post=3605"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.l2maker.com.br\/documentacao\/wp-json\/wp\/v2\/tags?post=3605"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}