Ir para conteúdo
Fórum Script Brasil
  • 0

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


reunix

Pergunta

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 para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...