Jump to content
Fórum Script Brasil
  • 0

Caracter inválido no arquivo após download do mesmo


reunix

Question

Bom dia pessoal, vejam bem que bruxaria...

Gerei um TXT no padrão DANFE, para importar para dentro do Emissor Gratuito do Governo, o arquivo é gerado perfeitamente no servidor, mas quando forço o download do mesmo

o o sistema por vontade própria adiciona um (.) ponto no fim do arquivo, e isso está dando uma dor de cabeça tremenda pois o Sistema Emissor logo acusa esse caracter como inválido.

já tentei tudo, inclusive a rotina do download mas nada, continua vindo com o ponto.

Quando gero o arquivo eu envio ele para um pasta específica do servidor antes de realizar o download, esse arquivo que fica na pasta do servidor não contem o caracter (.), ele é adicionado somente no arquivo que foi baixado no download.

Abaixo segue o codigo que fiz para gerar o TXT pra importar DANFE e no fim do código tem o trecho do download.

Espero ajudar também a quem procurava os detalhes do arquivo DANFE para importação!!

Segue o código:

<?php
    $controle     = (int) $this->idPedido;
    $cnumnfe     = $this->numdanfe;
    
    if ($this->TipoDanfe == 'venda'){
        $cTipoDanfe = 'V';    
    }else{
        $cTipoDanfe = 'S';    
    }
    
    $numped     = str_pad($controle, 6, "0", STR_PAD_LEFT); 

    $ccodempresa     = 
    $cddtemissao     = date('Y-m-d');
    $cddtsaida       = date('Y-m-d');
    $chorasaida      = date('H:i').":00"; 
    
    // caso seja uma impressao nova de nfe, capturo o proximo numero do danfe!!!
    if ($cnumnfe == '') {
        $cnumnfe = $this->DadosEmpresa['proximonfe'];
    }
    
    $cnomeempresa     = $this->DadosEmpresa['nomefantasia'];
    $crazaosocial     = $this->DadosEmpresa['razaosocial'];
    $cendereco         = $this->DadosEmpresa['endereco'];

    $ctel1             = substr($this->DadosEmpresa['telefone1'],1,2).''.substr($this->DadosEmpresa['telefone1'],5,4).''.substr($this->DadosEmpresa['telefone1'],10,4);

    $ccep             = substr($this->DadosEmpresa['cep'],0,5).''.substr($this->DadosEmpresa['cep'],6,3);

    $cuf             = $this->DadosEmpresa['uf'];
    $ccidade         = $this->DadosEmpresa['cidade'];
    $cbairro         = $this->DadosEmpresa['bairro'];
    $cnumero         = $this->DadosEmpresa['numero'];
    
    $ccnpjEmpresa = substr($this->DadosEmpresa['cnpj'],0,2).''.substr($this->DadosEmpresa['cnpj'],3,3).substr($this->DadosEmpresa['cnpj'],7,3).substr($this->DadosEmpresa['cnpj'],11,4).substr($this->DadosEmpresa['cnpj'],16,2);

    $codpais         = $this->DadosEmpresa['codpais'];
    $nomepais         = $this->DadosEmpresa['nomepais'];
    $cnae             = $this->DadosEmpresa['cnae'];
    $cie             = $this->DadosEmpresa['ie'];
    $cim             = $this->DadosEmpresa['im'];
    $ccodmunicipio     = $this->DadosEmpresa['codmunicipio'];
    $ccodpais         = $this->DadosEmpresa['codpais'];
    $cnomepais         = $this->DadosEmpresa['nomepais'];

    
    // dados do cliente e da venda!!!        
    $clienteemail           = $this->DadosVenda[0]['email'];
    $clientecpf             = $this->DadosVenda[0]['cpf'];
    $clientecnpj             = $this->DadosVenda[0]['cnpj'];
    $clientenome             = $this->DadosVenda[0]['nomecliente'];
    $clienteendereco         = $this->DadosVenda[0]['endereco'];
    $clientebairro             = $this->DadosVenda[0]['bairro'];
    $clientecidade             = $this->DadosVenda[0]['cidade'];
    $clienteuf                 = $this->DadosVenda[0]['uf'];
    
    $clientecep             = substr($this->DadosVenda[0]['cep'],0,5).''.substr($this->DadosVenda[0]['cep'],6,3);

    $clienteinscest         = ''; //; $this->DadosVenda[0]['ie'];
    $clientenum               = $this->DadosVenda[0]['numero'];

    $clientetelefone         = substr($this->DadosVenda[0]['telefone1'],1,2).''.substr($this->DadosVenda[0]['telefone1'],5,4).''.substr($this->DadosVenda[0]['telefone1'],10,4);

    $clientecomplemento        = '';
    $ccomplemento             = '';
    $clientecodmunicipio     = '2611606'; // OLINDA!!!

    $csituacao                 = '1';   // 1=producao  / 2=homologacao
    $ctipooperacao             = '1';  // 1 = saida   0 = entrada
    $ccodmunicipio             = '2611606';
    

    $finalidadeEmissao      = '1';  // 1=Nfe Normal; 2=Nfe Complementar; 3=Nfe de Ajuste

    $processoEmissao        = '3'; // 1=emissao avulsa pelo fisco; 2=emissao avulsa pelo contribuinte com seu certificado difital atraves do site do fisco; 3= emissao pelo contriuinte com aplicativo fornecido pelo fisco;

    $tipoPagto                 = '0';  //  0= avista   / 1=A prazo
    $versao                 = '2.2.2';
    
    $fp = fopen("../public_html/nfe/DF".$cTipoDanfe.'_'.$numped.".txt", "w");

    fwrite($fp,"NOTAFISCAL|1\r\n");
    fwrite($fp,"A|2.00|NFe\r\n" );
    fwrite($fp,'B|26||VENDA DE MERCADORIA|'.$tipoPagto.'|55|1|'.$cnumnfe.'|'.$cddtemissao.'|'.$cddtsaida."|".$chorasaida."|".$ctipooperacao."|".$ccodmunicipio."|1|1||".$csituacao."|".$finalidadeEmissao."|".$processoEmissao."|".$versao."|||\r\n" );
    
    fwrite($fp,'C|'.$crazaosocial.'|'.$cnomeempresa.'|'.$cie.'||'.$cim.'|'.$cnae. "|1|\r\n" );
    fwrite($fp,'C02|'.$ccnpjEmpresa. "|\r\n" );
    fwrite($fp,'C05|'.$cendereco.'|'.$cnumero.'|'.$ccomplemento.'|'.$cbairro.'|'.$ccodmunicipio.'|'.$ccidade.'|'.$cuf.'|'.$ccep.'|'.$ccodpais.'|'.$cnomepais.'|'.$ctel1. "|\r\n" );

    //------------CLIENTE!!!
    fwrite($fp,'E|'.$clientenome.'|'.$clienteinscest. "||".$clienteemail."|\r\n" );
  

      // 049.750.544-42
      // 01234567890123

    if ( $clientecpf != '' ) { // cpf agora com os digitos
        $clientecpf = substr($clientecpf,0,3).''.substr($clientecpf,4,3).substr($clientecpf,8,3).substr($clientecpf,12,2);
        fwrite($fp,'E03|'.$clientecpf. "|\r\n" ); 

    }else{
        $clientecnpj = substr($clientecnpj,0,2).''.substr($clientecnpj,3,3).substr($clientecnpj,7,3).substr($clientecnpj,11,4).substr($clientecnpj,16,2);

        fwrite($fp,'E02|'.$clientecnpj. "|\r\n" ); // cnpj
    }
    

    fwrite($fp,'E05|'.$clienteendereco.'|'.$clientenum.'|'.$clientecomplemento.'|'.$clientebairro.'|'.$clientecodmunicipio.'|'.$clientecidade.'|'.$clienteuf.'|'.$clientecep.'|'.$ccodpais.'|'.$cnomepais.'|'.$clientetelefone."|"."\r\n" );


    //------- IMPRESSÃO DOS ITENS!!!    
    $cvalunitario             = '0';
    $csubtotal                 = '0';
    $csubtotalcomdesconto     = '0';

    $nitem             = 1;

    $nTotalG         = 0;
    $nTotalIcms     = 0;
    $nTotalPis         = 0;
    $nTotalCofis     = 0;
    $cTotalTotal     = 0;
    $nTotalDesconto = 0;

    // itens do pedido!
    foreach ($this->DadosVendaPed as $DadosVendaPed):
    
        $cvalunit = $DadosVendaPed['valor'];
        $cvalunit = $cvalunit.'00';
        
        $csubtotal = $DadosVendaPed['subtotal'];

        $cdesconto = '';
        $ndesconto = 0;

        $csubtotalcomdesconto = $csubtotal; //FloatToStrF(dados.PedDiaSubTotal.value - dados.PedDiadesconto.value,ffNUMBER,15,2);
        
        $nTotalG         = $nTotalG + $csubtotalcomdesconto; 
        
        $cquantidade     = $DadosVendaPed['quantidade'];
        $cnomepeca         = $DadosVendaPed['nomeproduto'];

        $cAliquotaIcms     = 0; //17;
        $cAliquotaPis     = 0; //0.65;
        $cAliquotaCofis = 0; //3;
        
                        
/*        CFOP = 5405 (Venda de mercadoria adquirida ou recebida de terceiros em operação com mercadoria sujeita 
                    ao regime de substituição tributária, na condição de contribuinte substituído
                    Classificam-se neste código as vendas de mercadorias adquiridas ou recebidas de terceiros 
                    em operação com mercadorias sujeitas ao regime de substituição tributária, na condição de 
                    contribuinte substituído.)
               
                5102 (Venda de mercadoria adquirida ou recebida de terceiros) 

)                        
    */
        
        $cvalicms         = (($cvalunit - $ndesconto) * $cAliquotaIcms) /100;
        $nTotalIcms     = $nTotalIcms + $cvalicms;
        
        $cvalicms         = number_format($cvalicms, 2, '.', ',');
        $nTotalIcms     = number_format($nTotalIcms, 2, '.', ',');

        $cvalpis         = (($cvalunit - $ndesconto) * $cAliquotaPis) /100;
        $nTotalPis         = $nTotalPis + $cvalpis;
        
        $cvalpis         = number_format($cvalpis, 2, '.', ',');
        $nTotalPis         = number_format($nTotalPis, 2, '.', ',');

        $cvalcofis         = (($cvalunit - $ndesconto) * $cAliquotaCofis) /100;
        $nTotalCofis     = $nTotalCofis + $cvalcofis;
        
        $cvalcofis         = number_format($cvalcofis, 2, '.', ',');
        $nTotalCofis     = number_format($nTotalCofis, 2, '.', ',');
                                        
        $nTotalDesconto = 0;                                        
        
        $cTotalTotal     = $cTotalTotal + $csubtotal;
        
        $ccoditemfornecedor     = $DadosVendaPed['referencia'];
        $ccodbarrasfornecedor     = $DadosVendaPed['ncm'];
                                        
        fwrite($fp,'H|'.$nitem."||"."\r\n" );
        
         fwrite($fp,'I|'.$ccoditemfornecedor.'||'.$cnomepeca.'|'.$ccodbarrasfornecedor.'||5405|UN|'.$cquantidade.'.0000|'.$cvalunit.'000000|'.$csubtotal.'||UN|'.$cquantidade.'.0000|'.$cvalunit.'000000|||'.$cdesconto. "||1|||"."\r\n" );
                
        //-----------aqui!!
        fwrite($fp,"M|"."\r\n" );

        fwrite($fp,"N|"."\r\n" );

        //fwrite($fp,"N10d|0|400|"."\r\n" );
        fwrite($fp,"N10d|0|300|"."\r\n" );

        fwrite($fp,"Q|"."\r\n" );
        //fwrite($fp,'Q02|01|'.$csubtotalcomdesconto.'|'.$cAliquotaPis.'|'.$cvalpis. "|"."\r\n" );
        fwrite($fp,'Q04|07|'."\r\n" );

        fwrite($fp,"S|"."\r\n" );
        
        //fwrite($fp,'S02|01|'.$csubtotalcomdesconto.'|'.$cAliquotaCofis.'.00|'.$cvalcofis. "|"."\r\n" );
        fwrite($fp,'S04|07|'."\r\n" );
        
        $nitem=$nitem+1;

    endforeach;
    
    fwrite($fp,"W\r\n" );
    
    $nTotalG         = number_format($nTotalG, 2, '.', '');
    $cTotalTotal    = number_format($cTotalTotal, 2, '.', '');

    fwrite($fp,'W02|'.$nTotalG.'|'.$nTotalIcms.'|0.00|0.00|'.$cTotalTotal.'|0.00|0.00|'.$nTotalDesconto.'|'.'|0.00|0.00|'.$nTotalPis.'|'.$nTotalCofis.'|0.00|'.$nTotalG. "|"."\r\n" );

        ///////////////// AQUI EU TERMINO DE CRIAR O ARQUIVO, ATÉ AQUI ESTÁ TUDO OK, QUANDO VERIFICO O ARQUIVO CRIADO NO SERVIDOR ESTÁ OK
      
    fwrite($fp,"X|0|");
    fclose($fp);

    $file = "DF".$cTipoDanfe.'_'.$numped.".txt"; 
    
    define('DIR_DOWNLOAD','../public_html/nfe/'); 
    
    $arquivo = DIR_DOWNLOAD.$file; 
    $arquivo = $file; 

    $arquivo = DIR_DOWNLOAD.$arquivo; 

      /// ESSA FOI OUTRA MANEIRA QUE TENTEI PRA VER SE RESOLVERIA MAS não FUNCIONA também, CONTINUA TRAZENDO O PONTO (.) NO FIM DO ARQUIVO!!!
/*    //$file = $_REQUEST['file']; 
    header("Content-type: application/save"); 
    //header("Content-Length:".filesize($arquivo)); 
    header('Content-Disposition: attachment; filename='.basename($arquivo)); 
    header('Expires: 0'); 
    header('Pragma: no-cache'); 

*/
    // 
        //  ESSE É O TRECHO QUE FORÇA O DOWNLOAD DO ARQUIVO!!!! PROVAVELMENTE É POR AQUI QUE OCORRE O PROBLEMA!!!
        //
    header('Content-disposition: attachment; filename="'.basename($arquivo).'"');
    header('Content-Length: '.filesize($arquivo));
    readfile($arquivo);
    ?>

Esqueci de mencionar , quando dou um type arquivo.txt no DOS, invés dele mostrar um ponto ele mostra um conjunto de caracteres ASCII 'ì♂ú

Quem por favor tiver um ideia do que pode ser, informa por aqui, você está ajudando um cara desesperado !

e agradeço desde já!!!

Renato Muniz!!!

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Amigo, não analisei o seu problema.

Mas te recomendo a conhecer o projeto NFePHP.

Com ele você não precisa mais usar o programa do governo, faça tudo com o próprio PHP.

Gerar o txt, gerar xml, assinar o xml, enviar, pegar o xml autorizado e gerar o danfe em pdf.

[email=http://www.nfephp.org/]http://www.nfephp.org/

Uma outra dica, vi que seu script pega informações do próprio código.

o ideal é montar tabelas de paramentos fiscais.

Se quiser, posso te passar mais dicas com nota eletrônica.

At.

Everaldo

eve_anjos@hotmail.com

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.8k
×
×
  • Create New...