sefazDistDFe
Serviço destinado à distribuição de informações
resumidas e documentos fiscais eletrônicos de interesse de um ator.
public sefazDistDFe ( string $fonte = 'AN', string $tpAmb = '2', string $cnpj = '', integer $ultNSU, integer $numNSU, array &$aRetorno = [] ) : string | ||
$fonte | string | sigla da fonte dos dados 'AN' e para alguns casos pode ser 'RS' e para alguns casos pode ser 'RS' e para alguns casos pode ser 'RS' |
$tpAmb | string | tiupo de ambiente |
$cnpj | string | |
$ultNSU | integer | ultimo numero NSU que foi consultado |
$numNSU | integer | numero de NSU que se quer consultar |
$aRetorno | array | array com os dados do retorno |
return | string | contento o xml retornado pela SEFAZ |
/** * Faz a consulta no SEFAZ para cada uma das empresas cadastradas * * - Para primeira carga de uma nova empresa o campo config_nfe.nfeconfig_ultnsu deve ser igual a 0 (zero), essa primeira carga vai buscar todas as notas * dos ultimos 15 dias para cada empresa. Na primeira carga deve-se chamar esse metodo quantas vezes forem necessarias ate que tenha como retorno * a seguinte mensagem "Dados atualizados. Nao ha mais NFe para buscar." * * - Para cargas diarias o script se auto executara ate buscar todas as notas de todas as empresas. * Ao final será retornado a seguinte mensagem "Dados atualizados. Nao ha mais NFe para buscar." * * @name getCustomerNfe * @access public * @author Roberson Faria */ public function getCustomerNFe() { try { $result = Customer::all()->toArray(); if (count($result) > 0) { foreach ($result as $config) { $operation = new Operation(); $ultnsu = $operation->where('id_customer', $config['id'])->max('resnfe_nsu'); $nfe = new ToolsNFe($this->setConfig($config)); $nfe->sefazDistDFe('AN', $this->dadosConfig["tpAmb"], $this->dadosConfig["cnpj"], $ultnsu, 0, $this->retorno, false); // dd($this->retorno); foreach ($this->retorno['aDoc'] as $dados) { if ($dados["schema"] == "resNFe_v1.00.xsd") { $xml = simplexml_load_string($dados['doc']); if (strlen($xml->CNPJ) > 0) { $doc = $xml->CNPJ; } else { $doc = $xml->CPF; } Operation::create(['id_customer' => $config['id'], 'resnfe_nsu' => $dados['NSU'], 'resnfe_tpdoc' => "1", 'resnfe_dhrecbtolocal' => date('Y-m-d H:i:s'), 'resnfe_cnpj_cpf' => $doc, 'resnfe_ie' => $xml->IE, 'resnfe_xnome' => $xml->xNome, 'resnfe_chnfe' => $xml->chNFe, 'resnfe_demi' => date('Y-m-d H:i:s', strtotime($xml->dhEmi)), 'resnfe_tpnf' => $xml->tpNF, 'resnfe_csitnfe' => $xml->cSitNFe, 'resnfe_dhrecbto' => date('Y-m-d H:i:s', strtotime($xml->dhRecbto)), 'resnfe_vnf' => $xml->vNF, 'resnfe_xml' => addslashes($dados['doc'])]); if ($xml->cSitNFe == 4 or $xml->cSitNFe == 1) { $this->downloadXml($config['id'], $xml->chNFe); } // echo "res = ".$xml->chNFe."<br>"; } elseif ($dados["schema"] == "procNFe_v1.00.xsd") { // dd($dados); // $xml = simplexml_load_string ($dados['doc']); // dd($xml); // echo "proc = ".$xml->protNFe->infProt->chNFe."<br>"; } else { // print_r($dados); // echo "<br>"; } } } } // dd("acabou"); } catch (Exception $e) { Log::warning("Erro LibNfe Exception: " . $e->getMessage()); exit; } }
$ultNSU = 0; // se estiver como zero irá retornar os dados dos ultimos 15 dias até o limite de 50 registros // se for diferente de zero irá retornar a partir desse numero os dados dos // últimos 15 dias até o limite de 50 registros $numNSU = 0; // se estiver como zero irá usar o ultNSU // se for diferente de zero não importa o que está contido em ultNSU será retornado apenas // os dados deste NSU em particular $tpAmb = '1'; // esses dados somente existirão em ambiente de produção pois em ambiente de testes // não existem dados de eventos, nem de NFe emitidas para o seu CNPJ $cnpj = ''; // deixando vazio irá pegar o CNPJ default do config // se for colocado um CNPJ tenha certeza que o certificado está autorizado a // baixar os dados desse CNPJ pois se não estiver autorizado haverá uma // mensagem de erro da SEFAZ //array que irá conter os dados de retorno da SEFAZ $aResposta = array(); //essa rotina deve rá ser repetida a cada hora até que o maxNSU retornado esteja contido no NSU da mensagem //se estiver já foram baixadas todas as referencias a NFe, CTe e outros eventos da NFe e não a mais nada a buscar //outro detalhe é que não adianta tentar buscar dados muito antigos o sistema irá informar que //nada foi encontrado, porque a SEFAZ não mantêm os NSU em base de dados por muito tempo, em //geral são mantidos apenas os dados dos últimos 15 dias. //Os dados são retornados em formato ZIP dento do xml, mas no array os dados //já são retornados descompactados para serem lidos $xml = $nfe->sefazDistDFe('AN', $tpAmb, $cnpj, $ultNSU, $numNSU, $aResposta); echo '<br><br><PRE>'; echo htmlspecialchars($nfe->soapDebug); echo '</PRE><BR>'; print_r($aResposta); echo "<br>";