É possível acessar NSUs antigas sem ser bloquado?

83 views
Skip to first unread message

João Amato

unread,
Aug 1, 2025, 1:40:37 PM8/1/25
to NFePHP
Boa tarde grupo, gostaria de saber se é possível consultar NSUs antigas sem ser bloquado, sei que na teoria o sistema bloqueia acessos as muito antigas, porém somente o resumo já serviria pra mim, segue abaixo o código que estou usando, agradeço desde já a ajuda.

<?php
require 'vendor/autoload.php';

use NFePHP\NFe\Tools;
use NFePHP\Common\Certificate;

// CONFIGURAÇÕES
$configJson = file_get_contents('empresa.json'); // Ajuste o caminho
$pfxContent = file_get_contents('certificado.pfx'); // Ajuste o caminho
$certPassword = '########'; // Substitua pela senha

$tools = new Tools($configJson, Certificate::readPfx($pfxContent, $certPassword));
$tools->model('55');
$tools->setEnvironment(1);

$xmlPath = __DIR__ . '/xmls/';
if (!is_dir($xmlPath))
    mkdir($xmlPath);

$ultNSUfile = __DIR__ . '/ultNSU.txt';

// Recupera o último NSU já processado
if (file_exists($ultNSUfile)) {
    $ultNSU = trim(file_get_contents($ultNSUfile));
    if (!$ultNSU)
        $ultNSU = '000000000000000';
} else {
    $ultNSU = '000000000000000';
}
$maxNSU = $ultNSU;
$loopLimit = 15; // Menor que 20 para margem de segurança
$iCount = 0;

echo "Iniciando consulta a partir do NSU: $ultNSU\n";

while (bccomp($ultNSU, $maxNSU) <= 0) {
    $iCount++;
    if ($iCount > $loopLimit) {
        echo "Limite de consultas atingido. Aguarde e tente depois!\n";
        break;
    }

    try {
        $resp = $tools->sefazDistDFe($ultNSU);
    } catch (\Exception $e) {
        echo "Erro: " . $e->getMessage() . "\n";
        break;
    }

    $dom = new \DOMDocument();
    $dom->loadXML($resp);
    $node = $dom->getElementsByTagName('retDistDFeInt')->item(0);

    $cStat = $node->getElementsByTagName('cStat')->item(0)->nodeValue;
    $xMotivo = $node->getElementsByTagName('xMotivo')->item(0)->nodeValue;
    $ultNSU_resp = $node->getElementsByTagName('ultNSU')->item(0)->nodeValue;
    $maxNSU = $node->getElementsByTagName('maxNSU')->item(0)->nodeValue;
    $lote = $node->getElementsByTagName('loteDistDFeInt')->item(0);

    echo "Consulta $iCount | cStat=$cStat | ultNSU=$ultNSU_resp | maxNSU=$maxNSU | $xMotivo\n";

    // Grava o último NSU
    file_put_contents($ultNSUfile, $ultNSU_resp);

    if (in_array($cStat, ['137', '656'])) {
        $tempo = 3600; // 1 hora (em segundos)
        $msg = $cStat == '137'
            ? "Nenhum documento localizado. Espere pelo menos 1 hora para nova consulta."
            : "Consumo indevido! Bloqueado por 1 hora. Reveja sua rotina!";
        echo "$msg\n";
        break;
    }

    if (empty($lote)) {
        echo "Nenhum lote retornado.\n";
        $ultNSU = bcadd($ultNSU, 1, 0);
        sleep(2);
        continue;
    }

    foreach ($lote->getElementsByTagName('docZip') as $doc) {
        $nsu = $doc->getAttribute('NSU');
        $schema = $doc->getAttribute('schema');
        $xmlContent = gzdecode(base64_decode($doc->nodeValue));
        $arquivo = "{$xmlPath}{$nsu}_{$schema}.xml";
        file_put_contents($arquivo, $xmlContent);
        echo "Salvo: $arquivo\n";
    }

    if ($ultNSU_resp == $maxNSU) {
        echo "Chegou ao fim dos NSUs disponíveis! Nova consulta só após 1 hora.\n";
        break;
    }

    // Próximo NSU para consulta
    $ultNSU = $ultNSU_resp;
    sleep(2);
}

echo "Consulta encerrada.\n";
?>

Breno VilasBoas

unread,
Aug 4, 2025, 10:15:51 AM8/4/25
to nfe...@googlegroups.com
Bom dia João,

Algumas regras da Distribuição DF-e:
- Para os usuários do serviço dos últimos 60 dias, a geração de NSU continuará normalmente
- No caso de novos usuários (ou seja, ao consultar pela primeira vez), a geração de NSU ocorrerá a partir desse primeiro acesso (não haverá notas retroativas).
- Qualquer usuário que deixar de utilizar o serviço por mais de 60 dias, terá a geração de NSU interrompida e retomada a partir da próxima consulta com este método. Não haverá geração de NSU retroativa ao período de interrupção.
- Assim como nas demais consultas disponibilizadas pelo Web Service NFeDistribuicaoDFe, a consulta por NSU estará disponível para documentos recebidos pelo Ambiente Nacional nos últimos 90 dias. Após este período não será possível recuperar a NF-e.
   
Segue a NT para mais informações.

Atenciosamente,
Breno Vilas Boas

--
--
Você recebeu esta mensagem porque está inscrito no Grupo "NFePHP".
Para Postar: nfe...@googlegroups.com
Para Sair do Grupo: nfephp+un...@googlegroups.com
Link: http://groups.google.com.br/group/nfephp?hl=pt-BR
-------
Repositórios: https://github.com/nfephp-org
---
You received this message because you are subscribed to the Google Groups "NFePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to nfephp+un...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/nfephp/f9a3125a-c1ed-4ca3-8afb-e39d40ac7d21n%40googlegroups.com.
NT2014.002_v1.13 a 1.15 - WsNFeDistribuicaoDFe.pdf
Reply all
Reply to author
Forward
0 new messages