Jump to content

Recommended Posts

Senhores, boa tarde.

 

Estou com um probleminha... rss', preciso fazer a listagem de uma função da biblioteca "SPED-NFe"   na qual consulto quais as NFe que emitiram contra meu CNPJ, porém o ele executa toda a função e depois me trás o resultado, eu gostaria de trazer o resultado instantaneamente, como se fosse uma atualização segundo a segundo.

 

Citar

//PHP DA COISA

 

$tools->model('55');
    //este serviço somente opera em ambiente de produção
    $tools->setEnvironment(1);

    //este numero deverá vir do banco de dados nas proximas buscas para reduzir
    //a quantidade de documentos, e para não baixar várias vezes as mesmas coisas.
    $ultNSU = 0;
    $maxNSU = $ultNSU;
    $loopLimit = 50;
    $iCount = 0;
    $count_nfe_resumida = 0;
    //executa a busca de DFe em loop
    while ($ultNSU <= $maxNSU) {
        $iCount++;
        if ($iCount >= $loopLimit) {
            break;
        }
        try {
            //executa a busca pelos documentos
            $resp = $tools->sefazDistDFe($ultNSU);
        } catch (\Exception $e) {
            echo $e->getMessage();
            //tratar o erro
        }

        //extrair e salvar os retornos
        $dom = new \DOMDocument();
        $dom->loadXML($resp);
        $node = $dom->getElementsByTagName('retDistDFeInt')->item(0);
        $tpAmb = $node->getElementsByTagName('tpAmb')->item(0)->nodeValue;
        $verAplic = $node->getElementsByTagName('verAplic')->item(0)->nodeValue;
        $cStat = $node->getElementsByTagName('cStat')->item(0)->nodeValue;
        $xMotivo = $node->getElementsByTagName('xMotivo')->item(0)->nodeValue;
        $dhResp = $node->getElementsByTagName('dhResp')->item(0)->nodeValue;
        $ultNSU = $node->getElementsByTagName('ultNSU')->item(0)->nodeValue;
        $maxNSU = $node->getElementsByTagName('maxNSU')->item(0)->nodeValue;
        $lote = $node->getElementsByTagName('loteDistDFeInt')->item(0);
        if (empty($lote)) {
            //lote vazio
            continue;
        }
        //essas tags irão conter os documentos zipados
        $docs = $lote->getElementsByTagName('docZip');
        foreach ($docs as $doc) {
            $numnsu = $doc->getAttribute('NSU');
            $schema = $doc->getAttribute('schema');
            //descompacta o documento e recupera o XML original
            $content = gzdecode(base64_decode($doc->nodeValue));
            //identifica o tipo de documento
            $tipo = substr($schema, 0, 6);
            //processar o conteudo do NSU, da forma que melhor lhe interessar
            //esse processamento depende do seu aplicativo
        }
        
        if(strpos($content,"<xNome>",0) > 0)
        {
            
            $count_nfe_resumida++;
            $pos_ini2 = strpos($content,"<xNome>",0)+7;
            $pos_fim2 = strpos($content,"</xNome>",0);
            $res_forn[$count_nfe_resumida] = utf8_decode(substr($content,$pos_ini2,$pos_fim2-$pos_ini2));


            $pos_ini2 = strpos($content,"<chNFe>",0)+7;
            $pos_fim2 = strpos($content,"</chNFe>",0);
            $res_chave[$count_nfe_resumida] = utf8_decode(substr($content,$pos_ini2,$pos_fim2-$pos_ini2));
            
            $res_num_nfe[$count_nfe_resumida] = substr($res_chave[$count_nfe_resumida],25,9);

            $pos_ini2 = strpos($content,"<CNPJ>",0)+6;
            $pos_fim2 = strpos($content,"</CNPJ>",0);
            $res_cnpj[$count_nfe_resumida] = utf8_decode(substr($content,$pos_ini2,$pos_fim2-$pos_ini2));

            /*$pos_ini2 = strpos($content,"<IE>",0)+2;
            $pos_fim2 = strpos($content,"</IE>",0);
            $res_ie = utf8_decode(substr($content,$pos_ini2,$pos_fim2-$pos_ini2));*/

            $pos_ini2 = strpos($content,"<vNF>",0)+5;
            $pos_fim2 = strpos($content,"</vNF>",0);
            $res_vlr_nfe[$count_nfe_resumida] = utf8_decode(substr($content,$pos_ini2,$pos_fim2-$pos_ini2));

            $pos_ini2 = strpos($content,"<nProt>",0)+7;
            $pos_fim2 = strpos($content,"</nProt>",0);
            $res_protocolo[$count_nfe_resumida] = utf8_decode(substr($content,$pos_ini2,$pos_fim2-$pos_ini2));
            
            

            sleep(2);

            file_put_contents('NF/xml/compras/'.$res_forn[$count_nfe_resumida].' - '.$res_num_nfe[$count_nfe_resumida].'.xml',$content);

 

 

 

 

 

<!-- PARTE HTML DA COISA -->

<div class="row " style="padding: 0 10px 10px 10px;width:100%;text-align:center;">


        <h1 style=" padding-top: 10px; padding-bottom: 20px;">NFe - Emitidas Contra o CNPJ</h1>
        <form method="post" style="text-align:center">
            <br>
            
            
            <table  class='table table-striped table-bordered table-hover' style= 'max-width: 800px'>
                                        <tr>
                                            <th>  Chave de Acesso  </th>
                                            <th>  Nome do Fornecedor </th>
                                            <th>  CNPJ         </th>
                                            <th>  Valor    </th>
                                            <th>  Nº Protocolo      </th>
                                        </tr>
                <? $x=0;
                    while($x<=count($count_nfe_resumida)){ $x++;?>
                
                
            <div class="row " style="padding: 0 10px 10px 10px;width:100%;text-align:left;">
            <label style=" padding-top: 0px; padding-bottom: 0px;" class="control-label">Quantidades de NFe Encontrada</label>
            <div style="max-width: 60px;margin:0px 0px 30px 0px;">
            <input type='text' class='form-control onlyInteger' style='width:100%;' name='qnt_nf' id='qnt_nf' placeholder='0' value="<? echo $count_nfe_resumida;?>" readonly>
            </div>
                                        <tr>
                                              <td><? echo $res_chave[$x]; ?></td>
                                              <td><? echo $res_forn[$x]; ?></td>
                                              <td><? echo $res_cnpj[$x]; ?></td>
                                              <td><? echo $res_vlr_nfe[$x]; ?></td>
                                              <td><? echo $res_protocolo[$x]; ?></td>
                                        </tr>
                
                
                <? } ?>
                
            </table>
                
            <div style="clear: both; height: 30px"></div>
        <input type="submit" class=" form-control" style="max-width:120px;margin:0 0px 0px 0;" value="Buscar NFe" name="bt_enviar" id="bt_enviar">
        <br><br>    
        </form>


    </div>

 

Essas informações não são salvas em DB, é apenas para consulta.

Se alguém puder ajudar serei muito grato,

 

Abraço.

 

Michael Douglas

Share this post


Link to post
Share on other sites

Oi Machel, boa noite.

 

Você como deixa claro na linha 5 este ambiente opera apenas em produção, você tentou operar ele em produção para ver o resultado ou tentou postar no grupo da NFePHP no Google Groups ?

 

Eu não conheço a SPED-NFe, mas qual classe você precisa acessar ?

Share this post


Link to post
Share on other sites

caramba precisava de uma aplicação assim tbm, peguei seu codigo so q ta dando erro no meu, eu preciso pega uns dados no xml quando eles descompacta com o $content, so q nao to consegundo, to usando a função, simplexml_load_string

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By gersonab
      Bom dia, tenho 2 tabelas editáveis em uma div, estas funcionam normalmente, o problema é que o loop não acontece , só carrega sobre 1 item, sendo que este eu posso ter mais itens.
       na página principal tenho:
      <div class="carregadados"></div> function fetch_data() { $.ajax({ url:"../lista/finan.php", method:"POST", success:function(data){ $('.carregadados').html(data); } }); } fetch_data(); a página a ser carregada esta assim:
      <?php session_start(); require_once('config.php'); $output = ''; $idc1=$_SESSION['idc']; $sql01 = "SELECT * FROM porcent WHERE idfcli='$idc1'"; $result = mysqli_query($con, $sql01); while($user41 = mysqli_fetch_array($result)){ // primeiro while onde seleciono os itens da pessoa podendo ter vários $output .= ' <div class="table-responsive mb-4 mt-4"> Aqui vem os dados da pessoa '; $id1= $user41["idproc"]; $sqladv = "SELECT * FROM poradv WHERE procav='$id1'"; $resulta = mysqli_query($con, $sqladv); $output .= ' <table class="table table-bordered table-hover table-striped" style="width:100%"> <thead> <tr> </tr> </thead> <tbody>'; if(mysqli_num_rows($resulta) > 0) { while($usera = mysqli_fetch_array($resulta)){ //segundo while onde tenho os dados de venda em uma tabela editavel $output .= ' <tr> </tr>'; } $output .= ' <tr> // insiro linhas caso precise </tr> '; } else { $output .= '<tr> // caso não tenha nada inserido, posso fazer por aqui </tr> '; } $output .= '</tbody> </table>'; $id2= $user41["idproc"]; $sql = "SELECT * FROM parcelas WHERE procid='$id2' ORDER BY datapar, idpar ASC"; $result = mysqli_query($con, $sql); $output .= ' <table class="table table-bordered table-hover table-striped" style="width:100%"> <thead> <tr> // tabela de pagamentos editavel </tr> </thead> <tbody>'; if(mysqli_num_rows($result) > 0) { while($row = mysqli_fetch_array($result)) { //terceiro while , tabela referente a pagamentos $output .= ' <tr> // tabela pagamentos </tr>'; } $output .= ' <tr> // insiro linhas caso precise </tr> '; } else { $output .= '<tr> // caso não tenha nada inserido, posso fazer por aqui </tr> '; } $output .= '</tbody> </table> </div> '; } echo $output; ?> só esta carregando uma vez , tudo dentro da parte editável esta funcionando, porém no primeiro while só faz 1 loop, os demais estão funcionando perfeitamente.
      desde já agradeço qualquer ajuda.
    • By diagphp
      Olá amigos, sou muito novo no assunto de consultar APIs em PHP, então gostaria por gentileza de uma ajuda.
       
      Tem uma api externa que devemos consultar, mas está retornando o erro: PHP Fatal error: Uncaught Error: Class 'GuzzleHttp\Client' not found in /home1/

      A hospedagem é Hostgator.
       
       
      A consulta é simples:
       
      <?php
      $client = new \GuzzleHttp\Client();
      $response = $client->get("https://api.centraldofrete.com/v1/cargo-type", [
          'headers' => [
                  'Authorization' => '{token do cliente}',
              ],
      ]);
      $body = $response->getBody();
      print_r(json_decode((string) $body));
      ?>
       
      Alguém poderia me ajudar a fazer este tipo de consulta e obter o retorno da API? Tem algum arquivo a mais que tenho que colocar no servidor?
       
      Agradeço a  ajuda!
    • By dmelo
      Eu tenho um script   $('.btn').click();   mas ele só funciona se eu deixar o mouse em cima do elemento.
      Como fazer pra ele funcionar ignorando a posião do mouse?
      Agradeço muito quem puder me ajudar pois já procurei em vários fóruns mas não achei a solução.
    • By mamotinho
      Olá, estou com problemas, minha data está atualizando porém eu clico em um produto ele exibe o tempo sem atualizar . quando eu mudo de produto ele mostra os dois valores exemplo
      Produto 1: tem duraçao de: 1 dia e 13:023 PM
      Produto 2: tem duraçao de: 0 dia e 23:023 PM

      Quando eu clico no produto 1 ele exibe normalmente, porém quando mudo para o produto 2 ele fica atualizando o valor do dia do produto 1 e do produto 2 sempre mudando.
      segue abaixo como está o codigo

      JavaSCRIPT
       
      function anooo(mes,dia,h,m){ var mess = mes; var dias = dia; var hss = h; var mss = m; // Set the date we're counting down to var countDownDate = new Date(""+mess+" "+dias+", 2020 "+hss+":"+mss+":00").getTime(); // Update the count down every 1 second var x = setInterval(function() { // Get today's date and time var now = new Date().getTime(); // Find the distance between now and the count down date var distance = countDownDate - now; // Time calculations for days, hours, minutes and seconds var dayss = Math.floor(distance / (1000 * 60 * 60 * 24)); var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)); var seconds = Math.floor((distance % (1000 * 60)) / 1000); document.getElementById("days").innerHTML = dayss; document.getElementById("hrs").innerHTML = hours; document.getElementById("minus").innerHTML = minutes; document.getElementById("secs").innerHTML = seconds; this.remove(countDownDate); // If the count down is over, write some text if (distance < 0) { clearInterval(x); } }, 1000); } AQUI É O CHAMADO:
       
      <? if($result->Discount>=1){ $Month = date('M', strtotime($result->DateDiscount)); $Days = date('d', strtotime($result->DateDiscount)); $Hours = date('H', strtotime($result->DateDiscount)); $Minutes = date('i', strtotime($result->DateDiscount)); echo "<script>anooo('".$Month."','".$Days."','".$Hours."','".$Minutes."')</script>"; //echo "<script>alert('".$Month."')</script>"; ?> <ul class="time_sell remain_time"> <li> <dl> <dt class="blind">남은시간</dt> <dd> <span class='n_date day' id='days'></span> <span class='date'>일</span> <span class='n_time hour' id='hrs'></span> <span class='n_time minute' id='minus'></span> <span class='n_time second' id='secs'></span> <div id="countdown"></div> </dd> </dl> </li> </ul> <? } ?> eu já tentei de tudo mais sempre que mudo de produto ele exibe a data dos produtos anteriores em loop. a cada atualização do setInterval
    • By Camilavip
      Oi, como consigo fazer uma página de erro ou redirecionamento ou aviso, caso alguém clique em um cadastro que já não existe ou não tenha?
      localhost/clientes/12/ricardo No exemplo acima eu clico no cliente com esse id 12 e abre os dados dele, mas se eu o excluir mas estiver com o link e colocar no navegador, ele abre a página, sem os dados dele, mas abre. Eu queria se caso não tivesse mais o id cadastrado, abrisse algo como nenhum cadastro encontrado ou existente.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.